mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 12:37:32 -04:00 
			
		
		
		
	Add API Documentation to repo
This commit is contained in:
		
							parent
							
								
									37aaa1fc5b
								
							
						
					
					
						commit
						c995ac5f44
					
				| @ -409,7 +409,7 @@ class CompanyController extends BaseController | |||||||
|     public function update(UpdateCompanyRequest $request, Company $company) |     public function update(UpdateCompanyRequest $request, Company $company) | ||||||
|     { |     { | ||||||
|          |          | ||||||
|         if($request->hasFile('company_logo') || !array_key_exists('company_logo', $request->input('settings'))) |         if($request->hasFile('company_logo') || (is_array($request->input('settings')) && !array_key_exists('company_logo', $request->input('settings')))) | ||||||
|             $this->removeLogo($company); |             $this->removeLogo($company); | ||||||
| 
 | 
 | ||||||
|         $company = $this->company_repo->save($request->all(), $company); |         $company = $this->company_repo->save($request->all(), $company); | ||||||
|  | |||||||
| @ -790,4 +790,57 @@ class InvoiceController extends BaseController | |||||||
| 
 | 
 | ||||||
|         return response()->download($file_path, basename($file_path)); |         return response()->download($file_path, basename($file_path)); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @OA\Get( | ||||||
|  |      *      path="/api/v1/invoices/{id}/delivery_note", | ||||||
|  |      *      operationId="deliveryNote", | ||||||
|  |      *      tags={"invoices"}, | ||||||
|  |      *      summary="Download a specific invoice delivery notes", | ||||||
|  |      *      description="Downloads a specific invoice delivery notes", | ||||||
|  |      *      @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), | ||||||
|  |      *      @OA\Parameter(ref="#/components/parameters/X-Api-Token"), | ||||||
|  |      *      @OA\Parameter(ref="#/components/parameters/X-Requested-With"), | ||||||
|  |      *      @OA\Parameter(ref="#/components/parameters/include"), | ||||||
|  |      *      @OA\Parameter( | ||||||
|  |      *          name="id", | ||||||
|  |      *          in="path", | ||||||
|  |      *          description="The Invoice Hahsed Id", | ||||||
|  |      *          example="D2J234DFA", | ||||||
|  |      *          required=true, | ||||||
|  |      *          @OA\Schema( | ||||||
|  |      *              type="string", | ||||||
|  |      *              format="string", | ||||||
|  |      *          ), | ||||||
|  |      *      ), | ||||||
|  |      *      @OA\Response( | ||||||
|  |      *          response=200, | ||||||
|  |      *          description="Returns the invoice delivery note pdf", | ||||||
|  |      *          @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), | ||||||
|  |      *          @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), | ||||||
|  |      *          @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), | ||||||
|  |      *       ), | ||||||
|  |      *       @OA\Response( | ||||||
|  |      *          response=422, | ||||||
|  |      *          description="Validation error", | ||||||
|  |      *          @OA\JsonContent(ref="#/components/schemas/ValidationError"), | ||||||
|  |      * | ||||||
|  |      *       ), | ||||||
|  |      *       @OA\Response( | ||||||
|  |      *           response="default", | ||||||
|  |      *           description="Unexpected Error", | ||||||
|  |      *           @OA\JsonContent(ref="#/components/schemas/Error"), | ||||||
|  |      *       ), | ||||||
|  |      *     ) | ||||||
|  |      * @param $invoice | ||||||
|  |      * @return \Symfony\Component\HttpFoundation\BinaryFileResponse | ||||||
|  |      */ | ||||||
|  |     public function deliveryNote(ShowInvoiceRequest $request, Invoice $invoice) | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         $file_path = $invoice->service()->getInvoiceDeliveryNote($invoice->invitations->first()->contact); | ||||||
|  | 
 | ||||||
|  |         return response()->download($file_path, basename($file_path)); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -12,15 +12,15 @@ | |||||||
|  *         @OA\License( |  *         @OA\License( | ||||||
|  *             name="Attribution Assurance License", |  *             name="Attribution Assurance License", | ||||||
|  *             url="https://opensource.org/licenses/AAL" |  *             url="https://opensource.org/licenses/AAL" | ||||||
|  *         ) |  *         ), | ||||||
|  *     ), |  *     ), | ||||||
|  *     @OA\Server( |  *     @OA\Server( | ||||||
|  *         description="Example InvoiceNinja base url", |  *         description="Example InvoiceNinja base url", | ||||||
|  *         url="https://ninja.test" |  *         url="https://ninja.test", | ||||||
|  *     ), |  *     ), | ||||||
|  *     @OA\ExternalDocumentation( |  *     @OA\ExternalDocumentation( | ||||||
|  *         description="http://docs.invoiceninja.com", |  *         description="http://docs.invoiceninja.com", | ||||||
|  *         url="http://docs.invoiceninja.com" |  *         url="http://docs.invoiceninja.com" | ||||||
|  *     ) |  *     ), | ||||||
|  * ) |  * ), | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -143,6 +143,11 @@ class InvoiceService | |||||||
|         return (new GetInvoicePdf($this->invoice, $contact))->run(); |         return (new GetInvoicePdf($this->invoice, $contact))->run(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function getInvoiceDeliveryNote($contact = null) | ||||||
|  |     { | ||||||
|  |         //stubbed
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public function sendEmail($contact = null) |     public function sendEmail($contact = null) | ||||||
|     { |     { | ||||||
|         $send_email = new SendEmail($this->invoice, null, $contact); |         $send_email = new SendEmail($this->invoice, null, $contact); | ||||||
|  | |||||||
							
								
								
									
										198
									
								
								config/l5-swagger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										198
									
								
								config/l5-swagger.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,198 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return [ | ||||||
|  |     'default' => 'default', | ||||||
|  |     'documentations' => [ | ||||||
|  |         'default' => [ | ||||||
|  |             'api' => [ | ||||||
|  |                 'title' => 'L5 Swagger UI', | ||||||
|  |             ], | ||||||
|  | 
 | ||||||
|  |             'routes' => [ | ||||||
|  |                 /* | ||||||
|  |                  * Route for accessing api documentation interface | ||||||
|  |                 */ | ||||||
|  |                 'api' => 'api/documentation', | ||||||
|  |             ], | ||||||
|  |             'paths' => [ | ||||||
|  |                 /* | ||||||
|  |                  * File name of the generated json documentation file | ||||||
|  |                 */ | ||||||
|  |                 'docs_json' => 'api-docs.json', | ||||||
|  | 
 | ||||||
|  |                 /* | ||||||
|  |                  * File name of the generated YAML documentation file | ||||||
|  |                 */ | ||||||
|  |                 'docs_yaml' => 'api-docs.yaml', | ||||||
|  | 
 | ||||||
|  |                 /* | ||||||
|  |                  * Absolute paths to directory containing the swagger annotations are stored. | ||||||
|  |                 */ | ||||||
|  |                 'annotations' => [ | ||||||
|  |                     base_path('app'), | ||||||
|  |                 ], | ||||||
|  | 
 | ||||||
|  |             ], | ||||||
|  |         ], | ||||||
|  |     ], | ||||||
|  |     'defaults' => [ | ||||||
|  |         'routes' => [ | ||||||
|  |             /* | ||||||
|  |              * Route for accessing parsed swagger annotations. | ||||||
|  |             */ | ||||||
|  |             'docs' => 'docs', | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Route for Oauth2 authentication callback. | ||||||
|  |             */ | ||||||
|  |             'oauth2_callback' => 'api/oauth2-callback', | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Middleware allows to prevent unexpected access to API documentation | ||||||
|  |             */ | ||||||
|  |             'middleware' => [ | ||||||
|  |                 'api' => [], | ||||||
|  |                 'asset' => [], | ||||||
|  |                 'docs' => [], | ||||||
|  |                 'oauth2_callback' => [], | ||||||
|  |             ], | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Route Group options | ||||||
|  |             */ | ||||||
|  |             'group_options' => [], | ||||||
|  |         ], | ||||||
|  | 
 | ||||||
|  |         'paths' => [ | ||||||
|  |             /* | ||||||
|  |              * Absolute path to location where parsed annotations will be stored | ||||||
|  |             */ | ||||||
|  |             'docs' => storage_path('api-docs'), | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Absolute path to directory where to export views | ||||||
|  |             */ | ||||||
|  |             'views' => base_path('resources/views/vendor/l5-swagger'), | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Edit to set the api's base path | ||||||
|  |             */ | ||||||
|  |             'base' => env('L5_SWAGGER_BASE_PATH', null), | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Edit to set path where swagger ui assets should be stored | ||||||
|  |             */ | ||||||
|  |             'swagger_ui_assets_path' => env('L5_SWAGGER_UI_ASSETS_PATH', 'vendor/swagger-api/swagger-ui/dist/'), | ||||||
|  | 
 | ||||||
|  |             /* | ||||||
|  |              * Absolute path to directories that should be exclude from scanning | ||||||
|  |             */ | ||||||
|  |             'excludes' => [], | ||||||
|  |         ], | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * API security definitions. Will be generated into documentation file. | ||||||
|  |         */ | ||||||
|  |         'securityDefinitions' => [ | ||||||
|  |             'securitySchemes' => [ | ||||||
|  |                 /* | ||||||
|  |                  * Examples of Security schemes | ||||||
|  |                 */ | ||||||
|  |                 /* | ||||||
|  |                 'api_key_security_example' => [ // Unique name of security
 | ||||||
|  |                     'type' => 'apiKey', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
 | ||||||
|  |                     'description' => 'A short description for security scheme', | ||||||
|  |                     'name' => 'api_key', // The name of the header or query parameter to be used.
 | ||||||
|  |                     'in' => 'header', // The location of the API key. Valid values are "query" or "header".
 | ||||||
|  |                 ], | ||||||
|  |                 'oauth2_security_example' => [ // Unique name of security
 | ||||||
|  |                     'type' => 'oauth2', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
 | ||||||
|  |                     'description' => 'A short description for oauth2 security scheme.', | ||||||
|  |                     'flow' => 'implicit', // The flow used by the OAuth2 security scheme. Valid values are "implicit", "password", "application" or "accessCode".
 | ||||||
|  |                     'authorizationUrl' => 'http://example.com/auth', // The authorization URL to be used for (implicit/accessCode)
 | ||||||
|  |                     //'tokenUrl' => 'http://example.com/auth' // The authorization URL to be used for (password/application/accessCode)
 | ||||||
|  |                     'scopes' => [ | ||||||
|  |                         'read:projects' => 'read your projects', | ||||||
|  |                         'write:projects' => 'modify projects in your account', | ||||||
|  |                     ] | ||||||
|  |                 ], | ||||||
|  |                 */ | ||||||
|  | 
 | ||||||
|  |                 /* Open API 3.0 support | ||||||
|  |                 'passport' => [ // Unique name of security
 | ||||||
|  |                     'type' => 'oauth2', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
 | ||||||
|  |                     'description' => 'Laravel passport oauth2 security.', | ||||||
|  |                     'in' => 'header', | ||||||
|  |                     'scheme' => 'https', | ||||||
|  |                     'flows' => [ | ||||||
|  |                         "password" => [ | ||||||
|  |                             "authorizationUrl" => config('app.url') . '/oauth/authorize', | ||||||
|  |                             "tokenUrl" => config('app.url') . '/oauth/token', | ||||||
|  |                             "refreshUrl" => config('app.url') . '/token/refresh', | ||||||
|  |                             "scopes" => [] | ||||||
|  |                         ], | ||||||
|  |                     ], | ||||||
|  |                 ], | ||||||
|  |                 */ | ||||||
|  |             ], | ||||||
|  |             'security' => [ | ||||||
|  |                 /* | ||||||
|  |                  * Examples of Securities | ||||||
|  |                 */ | ||||||
|  |                 [ | ||||||
|  |                     /* | ||||||
|  |                     'oauth2_security_example' => [ | ||||||
|  |                         'read', | ||||||
|  |                         'write' | ||||||
|  |                     ], | ||||||
|  | 
 | ||||||
|  |                     'passport' => [] | ||||||
|  |                     */ | ||||||
|  |                 ], | ||||||
|  |             ], | ||||||
|  |         ], | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Set this to `true` in development mode so that docs would be regenerated on each request | ||||||
|  |          * Set this to `false` to disable swagger generation on production | ||||||
|  |         */ | ||||||
|  |         'generate_always' => env('L5_SWAGGER_GENERATE_ALWAYS', false), | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Set this to `true` to generate a copy of documentation in yaml format | ||||||
|  |         */ | ||||||
|  |         'generate_yaml_copy' => env('L5_SWAGGER_GENERATE_YAML_COPY', false), | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Edit to trust the proxy's ip address - needed for AWS Load Balancer | ||||||
|  |          * string[] | ||||||
|  |         */ | ||||||
|  |         'proxy' => false, | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Configs plugin allows to fetch external configs instead of passing them to SwaggerUIBundle. | ||||||
|  |          * See more at: https://github.com/swagger-api/swagger-ui#configs-plugin
 | ||||||
|  |         */ | ||||||
|  |         'additional_config_url' => null, | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), | ||||||
|  |          * 'method' (sort by HTTP method). | ||||||
|  |          * Default is the order returned by the server unchanged. | ||||||
|  |         */ | ||||||
|  |         'operations_sort' => env('L5_SWAGGER_OPERATIONS_SORT', null), | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Pass the validatorUrl parameter to SwaggerUi init on the JS side. | ||||||
|  |          * A null value here disables validation. | ||||||
|  |         */ | ||||||
|  |         'validator_url' => null, | ||||||
|  | 
 | ||||||
|  |         /* | ||||||
|  |          * Uncomment to add constants which can be used in annotations | ||||||
|  |          */ | ||||||
|  |         // 'constants' => [
 | ||||||
|  |         // 'L5_SWAGGER_CONST_HOST' => env('L5_SWAGGER_CONST_HOST', 'http://my-default-host.com'),
 | ||||||
|  |         // ],
 | ||||||
|  |     ], | ||||||
|  | ]; | ||||||
							
								
								
									
										0
									
								
								resources/views/vendor/l5-swagger/.gitkeep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								resources/views/vendor/l5-swagger/.gitkeep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										106
									
								
								resources/views/vendor/l5-swagger/index.blade.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								resources/views/vendor/l5-swagger/index.blade.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | |||||||
|  | <!-- HTML for static distribution bundle build --> | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | <head> | ||||||
|  |   <meta charset="UTF-8"> | ||||||
|  |   <title>{{config('l5-swagger.documentations.'.$documentation.'.api.title')}}</title> | ||||||
|  |   <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet"> | ||||||
|  |   <link rel="stylesheet" type="text/css" href="{{ l5_swagger_asset($documentation, 'swagger-ui.css') }}" > | ||||||
|  |   <link rel="icon" type="image/png" href="{{ l5_swagger_asset($documentation, 'favicon-32x32.png') }}" sizes="32x32" /> | ||||||
|  |   <link rel="icon" type="image/png" href="{{ l5_swagger_asset($documentation, 'favicon-16x16.png') }}" sizes="16x16" /> | ||||||
|  |   <style> | ||||||
|  |     html | ||||||
|  |     { | ||||||
|  |         box-sizing: border-box; | ||||||
|  |         overflow: -moz-scrollbars-vertical; | ||||||
|  |         overflow-y: scroll; | ||||||
|  |     } | ||||||
|  |     *, | ||||||
|  |     *:before, | ||||||
|  |     *:after | ||||||
|  |     { | ||||||
|  |         box-sizing: inherit; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     body { | ||||||
|  |       margin:0; | ||||||
|  |       background: #fafafa;
 | ||||||
|  |     } | ||||||
|  |   </style> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body> | ||||||
|  | 
 | ||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0"> | ||||||
|  |   <defs> | ||||||
|  |     <symbol viewBox="0 0 20 20" id="unlocked"> | ||||||
|  |           <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 20 20" id="locked"> | ||||||
|  |       <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 20 20" id="close"> | ||||||
|  |       <path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 20 20" id="large-arrow"> | ||||||
|  |       <path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 20 20" id="large-arrow-down"> | ||||||
|  |       <path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 24 24" id="jump-to"> | ||||||
|  |       <path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |     <symbol viewBox="0 0 24 24" id="expand"> | ||||||
|  |       <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/> | ||||||
|  |     </symbol> | ||||||
|  | 
 | ||||||
|  |   </defs> | ||||||
|  | </svg> | ||||||
|  | 
 | ||||||
|  | <div id="swagger-ui"></div> | ||||||
|  | 
 | ||||||
|  | <script src="{{ l5_swagger_asset($documentation, 'swagger-ui-bundle.js') }}"> </script> | ||||||
|  | <script src="{{ l5_swagger_asset($documentation, 'swagger-ui-standalone-preset.js') }}"> </script> | ||||||
|  | <script> | ||||||
|  | window.onload = function() { | ||||||
|  |   // Build a system
 | ||||||
|  |   const ui = SwaggerUIBundle({ | ||||||
|  |     dom_id: '#swagger-ui', | ||||||
|  | 
 | ||||||
|  |     url: "{!! $urlToDocs !!}", | ||||||
|  |     operationsSorter: {!! isset($operationsSorter) ? '"' . $operationsSorter . '"' : 'null' !!}, | ||||||
|  |     configUrl: {!! isset($configUrl) ? '"' . $configUrl . '"' : 'null' !!}, | ||||||
|  |     validatorUrl: {!! isset($validatorUrl) ? '"' . $validatorUrl . '"' : 'null' !!}, | ||||||
|  |     oauth2RedirectUrl: "{{ route('l5-swagger.'.$documentation.'.oauth2_callback') }}", | ||||||
|  | 
 | ||||||
|  |     requestInterceptor: function(request) { | ||||||
|  |       request.headers['X-CSRF-TOKEN'] = '{{ csrf_token() }}'; | ||||||
|  |       return request; | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     presets: [ | ||||||
|  |       SwaggerUIBundle.presets.apis, | ||||||
|  |       SwaggerUIStandalonePreset | ||||||
|  |     ], | ||||||
|  | 
 | ||||||
|  |     plugins: [ | ||||||
|  |       SwaggerUIBundle.plugins.DownloadUrl | ||||||
|  |     ], | ||||||
|  | 
 | ||||||
|  |     layout: "StandaloneLayout" | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   window.ui = ui | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
| @ -35,6 +35,8 @@ Route::group(['middleware' => ['api_db', 'token_auth', 'locale'], 'prefix' => 'a | |||||||
| 
 | 
 | ||||||
|     Route::resource('invoices', 'InvoiceController'); // name = (invoices. index / create / show / update / destroy / edit
 |     Route::resource('invoices', 'InvoiceController'); // name = (invoices. index / create / show / update / destroy / edit
 | ||||||
| 
 | 
 | ||||||
|  |     Route::get('invoices/{invoice}/delivery_note', 'InvoiceController@deliveryNote')->name('invoices.delivery_note'); | ||||||
|  | 
 | ||||||
|     Route::get('invoices/{invoice}/{action}', 'InvoiceController@action')->name('invoices.action'); |     Route::get('invoices/{invoice}/{action}', 'InvoiceController@action')->name('invoices.action'); | ||||||
| 
 | 
 | ||||||
|     Route::get('invoice/{invitation_key}/download', 'InvoiceController@downloadPdf')->name('invoices.downloadPdf'); |     Route::get('invoice/{invitation_key}/download', 'InvoiceController@downloadPdf')->name('invoices.downloadPdf'); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user