Procházet zdrojové kódy

Modificación de Adquisiciones / Facturación

JeanBenitez před 2 roky
rodič
revize
7a7db97958

+ 3 - 4
sistema-mantenimiento-back/app/Http/Controllers/DelayAnalysisController.php

@@ -33,6 +33,7 @@ class DelayAnalysisController extends Controller
                 ->where('ANRE_NULI', '=', $line)
                 ->join('S002V01TORCO', 'ORCO_NUOR', '=', 'ANRE_NUOR')
                 ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR')
+                ->join('S002V01TREFI', 'REFI_CORF', '=', 'PROV_CORF')
                 ->get([
                     'ANRE_IDAR',
                     'ANRE_NUOR',
@@ -48,11 +49,8 @@ class DelayAnalysisController extends Controller
                     'ORCO_NUOR',
                     'ORCO_NUPR',
                     'ORCO_NUDE',
-                    'ORCO_IDLI',
                     'ORCO_MONE',
                     'ORCO_COST',
-                    // 'ORCO_PROP',
-                    // 'ORCO_ACTI',
                     'ORCO_PROY',
 
                     'PROV_NUPR',
@@ -67,7 +65,8 @@ class DelayAnalysisController extends Controller
                     'PROV_TEL2',
                     'PROV_XRFC',
                     'PROV_XTAX',
-                    'PROV_GIRO',
+                    'REFI_CORF',
+                    'REFI_DESC',
                     'PROV_TIPO',
                     'PROV_SIWE',
                     'PROV_MEPA',

+ 5 - 1
sistema-mantenimiento-back/app/Http/Controllers/DocumentManagementController.php

@@ -450,6 +450,10 @@ class DocumentManagementController extends Controller{
         $extStr = $extArr[0];
 
         $isValid = $this->functionsController->checkFileSize($extStr, $size);
+        if ( $isValid && $extStr === 'xml') {
+            $isValid = $this->functionsController->checkInvoice($request->file('file')->getContent());
+        }
+
         if($isValid){
             $dir = str_replace("app\\Http\\Controllers", "storage\\app", __DIR__);
             $tmpPath = $request->file('file')->store('tempFiles');
@@ -467,7 +471,7 @@ class DocumentManagementController extends Controller{
                 'ARTE_USRE' => $idUser,
                 'ARTE_FERE' => $nowStr
             ]);
-            
+
             $actions = DB::getQueryLog();
             $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
 

+ 41 - 1
sistema-mantenimiento-back/app/Http/Controllers/FunctionsController.php

@@ -158,7 +158,7 @@ class FunctionsController extends Controller{
     public function checkFileSize($ext, $size){
         $availableFiles = [
             250=> ["zip", "tar", "rar", "7z", "mp3", "mpeg", "wav", "ogg", "opus", "jpg", "png", "gif", "bmp", "tiff", "svg",
-            "txt", "webm", "mp4", "3gp", "mov", "avi", "wmv", "flv", "dwg", "dxf", "3ds", "ai", "psd"],
+            "txt", "webm", "mp4", "3gp", "mov", "avi", "wmv", "flv", "dwg", "dxf", "3ds", "ai", "psd", "xml"],
             50 => ["doc", "docx", "vsd", "vsdx", "pdf"],
             75 => ["xls", "xlsx"],
             100=> ["ppt", "pptx"],
@@ -175,6 +175,46 @@ class FunctionsController extends Controller{
         return $size < $maxFileSize;
     }
 
+    public function checkInvoice($file) {
+
+        try {
+            $xml = simplexml_load_string($file, 'SimpleXMLElement', LIBXML_NOCDATA);
+            $ns = $xml->getNamespaces(true);
+            $xml->registerXPathNamespace('c', $ns['cfdi']);
+            $xml->registerXPathNamespace('t', $ns['tfd']);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_INVOICE_COMPARE006: Ocurrió un error al obtener la información del documento.",
+                $th->getMessage(),
+                500
+            );
+        }
+        $arrInfoInvoice = ((array) $xml)['@attributes'];
+        if (
+            array_key_exists('Version', $arrInfoInvoice) &&
+            array_key_exists('Serie', $arrInfoInvoice) &&
+            array_key_exists('Folio', $arrInfoInvoice) &&
+            array_key_exists('TipoDeComprobante', $arrInfoInvoice) &&
+            array_key_exists('NoCertificado', $arrInfoInvoice) &&
+            array_key_exists('Certificado', $arrInfoInvoice) &&
+            array_key_exists('Sello', $arrInfoInvoice) &&
+            array_key_exists('FormaPago', $arrInfoInvoice) &&
+            array_key_exists('MetodoPago', $arrInfoInvoice) &&
+            array_key_exists('SubTotal', $arrInfoInvoice) &&
+            array_key_exists('Moneda', $arrInfoInvoice) &&
+            array_key_exists('TipoCambio', $arrInfoInvoice) &&
+            array_key_exists('Total', $arrInfoInvoice) &&
+            array_key_exists('LugarExpedicion', $arrInfoInvoice) &&
+            array_key_exists('CondicionesDePago', $arrInfoInvoice) &&
+            array_key_exists('Fecha', $arrInfoInvoice) &&
+            array_key_exists('Exportacion', $arrInfoInvoice)
+        ) {
+            return true;
+        }
+        return false;
+    }
+
     public function now(){
         $completeDate = shell_exec('echo %date%');
         $completeDate = trim($completeDate);

+ 117 - 4
sistema-mantenimiento-back/app/Http/Controllers/InvoiceControlController.php

@@ -11,9 +11,8 @@ use App\Http\Controllers\ResponseController;
 use App\Http\Controllers\ResourcesController;
 use App\Http\Controllers\EncryptionController;
 
-class InvoiceControlController extends Controller
-{
-    
+class InvoiceControlController extends Controller {
+
     private $responseController;
     private $encController;
     private $resourcesController;
@@ -24,5 +23,119 @@ class InvoiceControlController extends Controller
         $this->resourcesController = new ResourcesController();
     }
 
-    
+    public function compareInvoice(Request $request) {
+        $validator = Validator::make($request->all(), [
+            'IDARCHIVO' => 'required|string',
+            'USER' => 'required|string',
+            'LINE_NUMBER' => 'required|string',
+            'REQUEST_LINE' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_INVOICE_COMPARE000: Se encontraron uno o más errores.",
+                $this->responseController->makeErrors($validator->errors()->messages()),
+                401
+            );
+        }
+
+        $responseData = $request->all();
+
+        $idArchivo = $this->encController->decrypt($responseData['IDARCHIVO']);
+
+        try {
+            $arrLineRequestData = DB::table('S002V01TLINE')
+                ->where('LINE_NULI', '=', $responseData['LINE_NUMBER'])
+                ->where('LINE_IDLI', '=', $responseData['REQUEST_LINE'])
+                ->where('LINE_ESTA', '=', 'En espera')
+                ->where('ARSE_ESTA', '=', 'Activo')
+                ->join('S002V01TARSE', 'LINE_IDLI','=', 'ARSE_IDLI')
+                ->get([
+                    'LINE_IDLI',
+                    'LINE_NUPR',
+                    'LINE_NUOR',
+                    'LINE_OTPR',
+                    'LINE_OTCO',
+                    'ARSE_IDAS',
+                    'ARSE_IDLI',
+                    'ARSE_IDAR',
+                    'ARSE_NUPR',
+                    'ARSE_IDIN',
+                    'ARSE_CANT',
+                    'ARSE_PRTO',
+                ]);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_INVOICE_COMPARE001: Ocurrió un error al obtener la información de la base de datos del documento.",
+                $th->getMessage(),
+                500
+            );
+        }
+
+        if (empty($arrLineRequestData)) {
+            return $this->responseController->makeResponse(true, "ERR_INVOICE_COMPARE002: No se pudo obtener la información de la línea de solicitud de compra.", [], 401);
+        }
+
+        try {
+            $fileTempData = (array) DB::table('S002V01TARTE')
+                ->where('ARTE_NULI', '=', $responseData['LINE_NUMBER'])
+                ->where('ARTE_IDAR', '=', $idArchivo)
+                ->where('ARTE_ESTA', '=', 'Activo')
+                ->first([
+                    'ARTE_IDAR',
+                    'ARTE_NULI',
+                    'ARTE_NOAR',
+                    'ARTE_EXTE',
+                    'ARTE_TAMA',
+                    'ARTE_UBTE',
+                    'ARTE_ESTA',
+                    'ARTE_USRE',
+                    'ARTE_FERE',
+                    'ARTE_USMO',
+                    'ARTE_FEMO',
+                    'ARTE_FEAR',
+                ]);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_INVOICE_COMPARE003: Ocurrió un error al obtener la información de la base de datos del documento.",
+                $th->getMessage(),
+                500
+            );
+        }
+
+        if (empty($fileTempData)) {
+            return $this->responseController->makeResponse(true, "ERR_INVOICE_COMPARE004: No se pudo obtener la información del documento.", [], 401);
+        }
+
+        if ( !file_exists($fileTempData['ARTE_UBTE']) ) {
+            return $this->responseController->makeResponse(true, "ERR_INVOICE_COMPARE005: No se pudo obtener el documento.", [], 401);
+        }
+
+        try {
+            $xml = simplexml_load_file($fileTempData['ARTE_UBTE'], 'SimpleXMLElement', LIBXML_NOCDATA);
+            $ns = $xml->getNamespaces(true);
+            $xml->registerXPathNamespace('c', $ns['cfdi']);
+            $xml->registerXPathNamespace('t', $ns['tfd']);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_INVOICE_COMPARE006: Ocurrió un error al obtener la información del documento.",
+                $th->getMessage(),
+                500
+            );
+        }
+
+        // echo "<pre>";
+        $arrConceptos = $xml->xpath('//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto');
+        $arrConceptos = json_decode(json_encode($arrConceptos), true);
+        foreach ($arrConceptos as $keyConceptos => $conceptos) {
+            $conceptos = $conceptos['@attributes'];
+            // print_r($conceptos);
+            // return $conceptos;
+        }
+
+        return $arrLineRequestData;
+    }
 }

+ 4 - 5
sistema-mantenimiento-back/app/Http/Controllers/OrderReceptionController.php

@@ -32,16 +32,14 @@ class OrderReceptionController extends Controller
                 ->orWhere('ORCO_ESTA', '=', 'Facturado')
                 ->orWhere('ORCO_ESTA', '=', 'Devuelto')
                 ->join('S002V01TDESP', 'DESP_NUDE', '=', 'ORCO_NUDE')
-                ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR') 
+                ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR')
+                ->join('S002V01TREFI', 'REFI_CORF', '=', 'PROV_CORF')
                 ->get([
                     'ORCO_NUOR',
                     'ORCO_NUPR',
                     'ORCO_NUDE',
-                    'ORCO_IDLI',
                     'ORCO_MONE',
                     'ORCO_COST',
-                    // 'ORCO_PROP',
-                    // 'ORCO_ACTI',
                     'ORCO_PROY',
                     'ORCO_ESTA',
                     'ORCO_NULI',
@@ -70,7 +68,8 @@ class OrderReceptionController extends Controller
                     'PROV_TEL2',
                     'PROV_XRFC',
                     'PROV_XTAX',
-                    'PROV_GIRO',
+                    'REFI_CORF',
+                    'REFI_DESC',
                     'PROV_TIPO',
                     'PROV_SIWE',
                     'PROV_MEPA',

+ 154 - 0
sistema-mantenimiento-back/app/Http/Controllers/SystemAdministratorController.php

@@ -4886,4 +4886,158 @@ class SystemAdministratorController extends Controller{
         $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
         return $this->responseController->makeResponse(false, 'EXITO', $functions);
     }
+
+    public function getTaxInformation($line){
+        try {
+            $getTaxInformation = DB::table('S002V01TINFI')
+                ->where('INFI_NULI','=',$line)
+                ->where('INFI_ESTA','=','Activo')
+                ->first([
+                    'INFI_IDIN',
+                    'INFI_NOFI',
+                    'INFI_XRFC',
+                    'INFI_COEL',
+                    'INFI_CORF',
+                    'INFI_LAD1',
+                    'INFI_TEL1',
+                    'INFI_LAD2',
+                    'INFI_TEL2',
+                    'INFI_COPO',
+                    'INFI_TIVI',
+                    'INFI_VIAL',
+                    'INFI_ENCA',
+                    'INFI_YCAL',
+                    'INFI_NUEX',
+                    'INFI_NUIN',
+                    'INFI_COLO',
+                    'INFI_LOCA',
+                    'INFI_MUNI',
+                    'INFI_ENFE',
+                    'INFI_USRE',
+                    'INFI_FERE',
+                    'INFI_USMO',
+                    'INFI_FEMO',
+                ]);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_GET_TAX_INFORMATION000: Ocurrió un error al obtener la información fiscal.", [], 401);
+        }
+
+        return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $getTaxInformation);
+    }
+
+    public function saveTaxInformation(Request $request) {
+        $validator = Validator::make($request->all(), [
+            'NOMBRE_FISCAL' => 'required|string',
+            'RFC' => 'required|string',
+            'CORREO_ELECTRONICO' => 'required|string',
+            'REGIMEN_FISCAL' => 'required|string',
+            'LADA1' => 'required|string',
+            'TELEFONO_FIJO' => 'required|integer',
+            'LADA2' => 'required|string',
+            'TELEFONO_MOVIL' => 'required|integer',
+            'CODIGO_POSTAL' => 'required|integer',
+            'TIPOVIALIDAD' => 'required|string',
+            'NOMBRE_VIALIDAD' => 'required|string',
+            'ENTRE_CALLE' => 'required|string',
+            'Y_CALLE' => 'required|string',
+            'NUMERO_EXTERIOR' => 'required|string',
+            // 'NUMERO_INTERIOR' => 'required|string',
+            'COLONIA' => 'required|string',
+            'LOCALIDAD' => 'required|string',
+            'MUNICIPIO' => 'required|string',
+            'ENTIDAD_FEDERATIVA' => 'required|string',
+            'USER' => 'required|string',
+            'LINE_NUMBER' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return $this->responseController->makeResponse(
+                true,
+                "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION000: Se encontraron uno o más errores.",
+                $this->responseController->makeErrors($validator->errors()->messages()),
+                401
+            );
+        }
+
+        DB::beginTransaction();
+        $responseData = $request->all();
+
+        try {
+            $user = $this->encryptionController->decrypt($responseData['USER']);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION001: Ocurrió un error al desencriptar los datos.", [], 401);
+        }
+
+        $now = $this->functionsController->now();
+        $currentDate = $now->toDateTimeString();
+
+        try {
+            $existsActives = DB::table('S002V01TINFI')
+                ->where('INFI_ESTA','=','Activo')
+                ->where('INFI_NULI','=',$responseData['LINE_NUMBER'])
+                ->exists();
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION002: Ocurrió un error al validar los registros anteriores.", [], 401);
+        }
+        if ($existsActives) {
+            try {
+                $validateUpdate = DB::table('S002V01TINFI')
+                    ->where('INFI_ESTA','=','Activo')
+                    ->where('INFI_NULI','=',$responseData['LINE_NUMBER'])
+                    ->update([
+                        'INFI_ESTA' => 'Inactivo',
+                        'INFI_USMO' => $user,
+                        'INFI_FEMO' => $currentDate,
+                        'INFI_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
+                    ]);
+            } catch (\Throwable $th) {
+                DB::rollBack();
+                return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION002: Ocurrió un error al modificar los registros anteriores.", $th->getMessage(), 401);
+            }
+            if (!$validateUpdate) {
+                DB::rollBack();
+                return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION003: No se pudo modificar los registros anteriores.", [], 401);
+            }
+        }
+
+        try {
+            $validateInsert = DB::table('S002V01TINFI')->insert([
+                'INFI_NOFI' => $responseData['NOMBRE_FISCAL'],
+                'INFI_XRFC' => $responseData['RFC'],
+                'INFI_COEL' => $responseData['CORREO_ELECTRONICO'],
+                'INFI_CORF' => $responseData['REGIMEN_FISCAL'],
+                'INFI_LAD1' => $responseData['LADA1'],
+                'INFI_TEL1' => $responseData['TELEFONO_FIJO'],
+                'INFI_LAD2' => $responseData['LADA2'],
+                'INFI_TEL2' => $responseData['TELEFONO_MOVIL'],
+                'INFI_COPO' => $responseData['CODIGO_POSTAL'],
+                'INFI_TIVI' => $responseData['TIPOVIALIDAD'],
+                'INFI_VIAL' => $responseData['NOMBRE_VIALIDAD'],
+                'INFI_ENCA' => $responseData['ENTRE_CALLE'],
+                'INFI_YCAL' => $responseData['Y_CALLE'],
+                'INFI_NUEX' => $responseData['NUMERO_EXTERIOR'],
+                'INFI_NUIN' => $responseData['NUMERO_INTERIOR'],
+                'INFI_COLO' => $responseData['COLONIA'],
+                'INFI_LOCA' => $responseData['LOCALIDAD'],
+                'INFI_MUNI' => $responseData['MUNICIPIO'],
+                'INFI_ENFE' => $responseData['ENTIDAD_FEDERATIVA'],
+                'INFI_NULI' => $responseData['LINE_NUMBER'],
+                'INFI_USRE' => $user,
+                'INFI_FERE' => $currentDate,
+                'INFI_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
+            ]);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION004: Ocurrió un error al insertar los datos en la base de datos.", $th->getMessage(), 401);
+        }
+        if (!$validateInsert) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "ERR_SYSTEM_ADMINISTRATOR_TAX_INFORMATION005: No se pudo insertar los datos en la base de datos.", [], 401);
+        }
+
+        DB::commit();
+        return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
+    }
 }

binární
sistema-mantenimiento-back/public_files/01-ADSI-CA-230120-000001=01=Pantallas SAM.xlsx


binární
sistema-mantenimiento-back/public_files/01-GIST-CE-230630-000001=01=Tipos de Documentos.xlsx


+ 4 - 2
sistema-mantenimiento-back/routes/api.php

@@ -147,6 +147,8 @@ Route::middleware(['jwt.auth'])->group(function(){
     Route::post("/update-web-service", "App\Http\Controllers\SystemAdministratorController@updateWebService");                            //Actualiza la información de un servicio web
     Route::post("/change-ws-status", "App\Http\Controllers\SystemAdministratorController@changeWSstatus");                                //Actualiza el estado de un servicio web
     Route::post("/update-order-priorities", "App\Http\Controllers\SystemAdministratorController@updateOrderPriorities");                  //Actualiza el estado de un servicio web
+    Route::get("/get-tax-information/{line}", "App\Http\Controllers\SystemAdministratorController@getTaxInformation");                  //Actualiza el estado de un servicio web
+    Route::post("/update-tax-information", "App\Http\Controllers\SystemAdministratorController@saveTaxInformation");                  //Actualiza el estado de un servicio web
     //Módulo gestión documental electrónica
     Route::get("/get-file-info/{id}/{idUser}/{line}", "App\Http\Controllers\DocumentManagementController@getFileInfo");                   //Obtiene la información de un archivo en específico
     Route::get("/get-download-token/{idFile}/{idUser}/{line}", "App\Http\Controllers\DocumentManagementController@getDownloadToken");     //Permite generar un token para descargar un archivo
@@ -280,8 +282,8 @@ Route::middleware(['jwt.auth'])->group(function(){
     Route::post('acquisition-management/dispatch/register-dispatch',                                                [DispatchController::class,             'registerDispatch']);
     Route::post('acquisition-management/dispatch/update-dispatch',                                                  [DispatchController::class,             'updateDispatch']);
     Route::post('acquisition-management/dispatch/delete-dispatch',                                                  [DispatchController::class,             'deleteDispatch']);
-    
-    Route::post('acquisition-management/invoice/delete-dispatch',                                                   [InvoiceControlController::class,       '']);
+
+    Route::post('acquisition-management/invoice/compare-invoice',                                                   [InvoiceControlController::class,       'compareInvoice']);
 
     // Module: ANFA
     Route::get ('failure-analysis/get-catalog-failure/{line}',                                                      [CatalogFailureController::class,  'getFailures']);