emizoripx/clientfel

连接到FEL以生成玻利维亚的发票

v2.18.5 2024-09-06 14:23 UTC

This package is auto-updated.

Last update: 2024-09-06 14:23:56 UTC


README

FEL服务消费客户端,用于开票

全新安装

步骤 1

  • php artisan migrate 创建新表
  • php artisan vendor:publish 并在列表中选择 EmizorIpx\ClientFel\ClientFelServiceProvider

步骤 2

  • 进入 app/config/clientfel.php 并更改FEL的api_url和INVOICE、ACCOUNT、PRODUCT类的路由
  • 进入 routes/api.php 并在group前缀 'api/v1' 内插入
    
    use EmizorIpx\ClientFel\routes\Credentials;
    ...

    Credentials::routes();
  • 进入 app/Models/Invoices.php 并添加 use InvoiceFelTrait;
  • 进入 app/Repositories/BaseRepository.php
    <?php

    namespace App\Repositories;
    
    //class BaseRepository{
    ...
    
    # insert here the method that send to fel

    $model->createInvoiceFel();

    # before return

        // return $model->fresh();

步骤 3

进入 App\Http\Requests\Account\CreateAccountRequest 并添加以下代码

    // public function rules()
    // {
        // return [
        //     //'email' => 'required|string|email|max:100',
        //     'first_name'        => 'string|max:100',
        //     'last_name'         =>  'string:max:100',
        //     'password'          => 'required|string|min:6',
        //     'email'             => 'bail|required|email:rfc,dns',
        //     'email'             => new NewUniqueUserRule(),
        //     'privacy_policy'    => 'required',
        //     'terms_of_service'  => 'required',
            'client_id'         => 'nullable|string|max:100',
            'client_secret'     => 'nullable|string|max:100'
        // ];
    // }

更新库

  • 运行
    • 运行 composer update emizoripx/clientfel
    • 如果有问题,删除库 composer remove emizor/clientfel
    • 然后安装它 composer require emizoripx/clientfel
  • 检查是否已插入步骤2中所述的方法和路由

API

  • GET TOKENS /api/v1/clientfel/getToken/ 默认获取用户登录公司的ID

            {
                "token_type": "",
                "expires_in": "",
                "settings": "",
                "access_token": ""
            }
  • 注册凭据 /api/v1/clientfel/registerCredentials 此外,如果已注册account_id,它还会更新注册

    • json : { "client_id" : "300001", "client_secret" : "PDAYQ59drtn4wSOxIz9gYfbBNrXx4ibkneKCtk5A"} 注册后执行getToken
  • 注册设置 /api/v1/clientfel/settings

    • json : { "setting": { "activity_id": 474000, "caption_id": 45, "payment_method_id": 1 } }

// 目前不可用,现在在创建产品的过程中完成同质化端点

  • 同质化产品

    • [POST] /api/v1/clientfel/homologateProduct
      • json : { "codigo_producto" : 12, "codigo_producto_sin": 83141, "codigo_unidad" : 1, "nombre_unidad" : "unidad" } codigo_producto_sin必须在SIN产品列表中存在
  • 获取参数

    • [GET] /api/v1/clientfel/parametricas/motivo-anulacion
    • [GET] /api/v1/clientfel/parametricas/paises
    • [GET] /api/v1/clientfel/parametricas/tipos-documento-de-identidad
    • [GET] /api/v1/clientfel/parametricas/metodos_de_pago
    • [GET] /api/v1/clientfel/parametricas/monedas
    • [GET] /api/v1/clientfel/parametricas/unidades
    • [GET] /api/v1/clientfel/parametricas/actividades
    • [GET] /api/v1/clientfel/parametricas/leyendas
    • [GET] /api/v1/clientfel/parametricas/productos-sin
  • 开具发票

    • [POST] /api/v1/clientfel/invoices
      json_body : {"id_origin": "xYRdG7dDzO"} , 此字段是invoice表的id,响应:{"success": true}
  • 从网页检查错误

    • [HOST] /bitacora

FEL数据附加

  • 数据将附加到来自文件的响应数据中 App\Http\Controllers\BaseController; 有必要将查询参数 include_fel_data 设置为true

     <?php
         
         namespace App\Http\Controllers;
         use EmizorIpx\ClientFel\Utils\Presenter;
         protected function response($response)
         {
                 $index = request()->input('index') ?: $this->forced_index;
    
                 if ($index == 'none') {
                     ...
                 } else {
                     ...
                         $response = Presenter::appendFelData($response, auth()->user()->getCompany()->id);
                     
                     ...
                 }
                 ...
    
                 return ...
             }
    
  • 此附加包含以下结构

            {
                "data": [],
                "fel_data": {
                    "invoices": [],
                    "products":[],
                    "clients":[],
                    "parametrics":
                    {
                        "motivo-anulacion": [],
                        "paises": [],
                        "tipos-documento-de-identidad": [],
                        "metodos_de_pago": [],
                        "monedas": [],
                        "unidades":[],
                        "actividades":[],
                        "leyendas":[],
                    }
                    
                },
                "meta": {}
            }

添加了检查产品和客户数据的规则

  • 在验证文件 App\Http\Requests\Shop\StoreShopInvoiceRequest; 中添加了检查产品是否存在规则

        <?php
            
            namespace App\Http\Requests\Shop;
            ...
            use EmizorIpx\ClientFel\Http\ValidationRules\Invoice\InvoiceRules;
            ...
            class StoreShopInvoiceRequest extends Request{
    
                public function rules()
                {
                    ...
    
                    $rules = array_merge($rules, InvoiceRules::additionalInvoiceRules());
    
                    return $rules;
                }
    
                ...
            }

添加了检查客户数据的规则

  • 在验证文件 App\Http\Requests\Shop\StoreShopClientRequest; 中添加了检查客户数据的规则

        <?php
            
            namespace App\Http\Requests\Shop;
            ...
            use EmizorIpx\ClientFel\Http\ValidationRules\Invoice\ClientRules;
            ...
            class StoreShopClientRequest extends Request{
    
                public function rules()
                {
                    ...
    
                    $rules = array_merge($rules, ClientRules::additionalClientRules());
    
                    return $rules;
                }
    
                ...
            }

在请求Shop Invoices中插入额外数据

  • App\Http\Controllers\Shop\InvoiceController 中添加了将所需数据插入商店发票请求的方法

            <?php
                
                namespace App\Http\Controllers\Shop;
                ...
                use EmizorIpx\ClientFel\Repository\FelInvoiceRequestRepository;
                ...
                class InvoiceController extends BaseController{
        
                    ...
    
                    public function store(StoreShopInvoiceRequest $request)
                    {
                        ...
    
                        $client = Client::find($request->input('client_id'));
    
                        ...
                        #Add
                        $inputData = FelInvoiceRequestRepository::completeDataRequest($request->all(), $company->id);
                        $request->replace($inputData);
                        $invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create($company->id, $company->owner()->id));
    
                        ...
    
                        return $this->itemResponse($invoice);
                    }
                }

在请求Shop Client中插入额外数据

  • App\Http\Controllers\Shop\ClientController 中添加了插入必要数据到商店客户端请求的方法

            <?php
                
                namespace App\Http\Controllers\Shop;
                ...
                use EmizorIpx\ClientFel\Repository\FelClientRepository;
                ...
                class ClientController extends BaseController{
        
                    ...
    
                    public function store(StoreShopClientRequest $request)
                    {
    
                        ...
                        #Add
                        $inputData = FelClientRepository::completeDataRequest($request->all());
                        $request->replace($inputData);
                        $invoice = $this->invoice_repo->save($request->all(), ClientFactory::create($company->id, $company->owner()->id));
    
                        ...
    
                        return $this->itemResponse($invoice);
                    }
                }

添加了用于发出发票的特质

  • App\Models\Invoice 中添加了用于发出发票的特质

        <?php
            namespace App\Models;
    
            ...
            use EmizorIpx\ClientFel\Traits\InvoiceFelEmitTrait;
            ...
    
            class Invoice extends BaseModel
            {
                ...
                use InvoiceFelEmitTrait; 
                ...
                
            }
    
  • App\Http\Controllers\Shop\InvoiceController 中添加了用于发出发票的函数

                <?php
                    
    
                    namespace App\Http\Controllers\Shop;
    
                    class InvoiceController extends BaseController
                    {
                        
                        public function store(StoreShopInvoiceRequest $request)
                        {
                            ...
    
                            $invoice = $invoice->service()->triggeredActions($request)->save();
    
                            $invoice->emit();
    
                            ...
                            return $this->itemResponse($invoice);
                        }
                    }

添加了中间件 CheckSettings

  • 在商店路由中添加了一个中间件以验证参数设置

                <?php
    
                    use Illuminate\Support\Facades\Route;
    
                    Route::group(['middleware' => ['company_key_db', 'locale'], 'prefix' => 'api/v1'], function () {
                        
                        ...
                        
                        Route::middleware(['check_settings'])->group(function () {
                            Route::post('shop/invoices', 'Shop\InvoiceController@store');
                            
                        });
    
                        ...
    
                    });

Artisan 命令的使用

  • php artisan emizor:make-patch [补丁文件名] 这个命令将生成一个将被作为迁移执行的文件。这些文件将被存储在 src\Patches 目录中

      Example: php artisan emizor:make-patch update_new_columns_fel_database
    
  • php artisan emizor:patch 这个命令将执行 patches 文件夹中的所有文件,并且每个文件将执行一次,因为每次执行这个命令时,它都会被保存到数据库中