| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 |
- <?php
- /*
- Desarrollador: Ing. Jean Jairo Benitez Meza
- Ultima Modificación: 11/04/2023
- Módulo: Gestión de Adquisiciones
- */
- namespace App\Http\Controllers;
- use App\Http\Controllers\Controller;
- use App\Http\Controllers\ResponseController;
- use App\Http\Controllers\EncryptionController;
- use App\Http\Controllers\ResourcesController;
- use Illuminate\Http\Request;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Validator;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Facades\Storage;
- use \Mpdf\Mpdf as PDF;
- class OrderController extends Controller {
- private $responseController;
- private $encController;
- private $resourcesController;
- public function __construct(){
- $this->responseController = new ResponseController();
- $this->encController = new EncryptionController();
- $this->resourcesController = new ResourcesController();
- }
- public function getOrders($line) {
- try {
- $arrOrders = DB::table('S002V01TORCO')
- ->where('ORCO_NULI', '=', $line)
- ->where('DESP_NULI', '=', $line)
- ->where('PROV_NULI', '=', $line)
- ->where('LINE_NULI', '=', $line)
- ->where('MEPA_NULI', '=', $line)
- ->join('S002V01TDESP', 'DESP_IDDE', '=', 'ORCO_NUDE')
- ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR')
- ->join('S002V01TLINE', 'LINE_NUOR', '=', 'ORCO_NUOR')
- ->join('S002V01TMEPA', 'MEPA_IDME', '=', 'ORCO_IDME')
- ->get([
- 'ORCO_NUOR', // Número de Orden
- 'PROV_NUPR', // Número de Proveedor
- 'PROV_NOCO', // Nombre Comercial del Proveedor
- 'DESP_IDDE', // Número de Despacho
- 'DESP_NOMB', // Nombre del Despacho
- 'LINE_IDLI', // Identificador de línea de solicitud de compra
- // 'LINE_DESC', // Descripción de la línea de solicitud de compra
- 'MEPA_IDME', // Métodos de Pago
- 'MEPA_NOMB', // Nombre del método de pago
- 'ORCO_COST', // Costo Total
- 'ORCO_MONE', // Moneda
- // 'ORCO_PROP', // Proposito
- // 'ORCO_ACTI', // Actividad
- 'ORCO_PROY', // Proyecto
- 'ORCO_ESTA', // Estado
- 'ORCO_USRE', // Usuario Registra
- 'ORCO_FERE', // Fecha Registra
- 'ORCO_USMO', // Usuario Modifica
- 'ORCO_FEMO', // Fecha Modifica
- ]);
- } catch ( \Throwable $th ) {
- return $this->responseController->makeResponse(true, "ERR_ORDER_GET000: Ocurrió un error al momento de obtener las órdenes de compra.", $th->getMessage(), 500);
- }
- return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrOrders);
- }
- // Se crea una orden de compra
- public function createOrder(Request $request){
- $validator = Validator::make($request->all(), [
- 'NUMERO_SOLICITUD' => 'required|string',
- 'NUMERO_LINEA' => 'required|string',
- 'USUARIO' => 'required|string',
- 'ARR_ORDENES' => 'required|array',
- ]);
- if ($validator->fails()) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDER_REG000: Se encontraron uno o más errores.",
- $this->responseController->makeErrors($validator->errors()->messages()),
- 401
- );
- }
- DB::beginTransaction();
- $requestData = $request->all();
- try {
- $user = $this->encController->decrypt($requestData['USUARIO']);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG001: Ocurrió un error al obtener el usuario.", [], 500);
- }
- foreach ($requestData['ARR_ORDENES'] as $keyOrders => $orders) {
- $validator = Validator::make($orders, [
- 'NUMERO_PROVEEDOR' => 'required|string',
- 'PROVEEDOR' => 'required|string',
- 'PRECIO_TOTAL' => 'required|integer',
- 'MONEDA' => 'required|string',
- 'DESPACHO' => 'required|integer',
- 'PROYECTO' => 'required|string',
- // 'PROPOSITO' => 'required|string',
- // 'ACTIVIDAD' => '',
- ]);
- if ($validator->fails()) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDER_REG002: Se encontraron uno o más errores.",
- $this->responseController->makeErrors($validator->errors()->messages()),
- 401
- );
- }
- $arrInsert = [
- 'ORCO_NUPR' => $orders['NUMERO_PROVEEDOR'],
- 'ORCO_NUDE' => $orders['DESPACHO'],
- 'ORCO_IDLI' => $requestData['NUMERO_SOLICITUD'],
- 'ORCO_COST' => $orders['PRECIO_TOTAL'],
- 'ORCO_MONE' => $orders['MONEDA'],
- // 'ORCO_PROP' => $orders['PROPOSITO'],
- // 'ORCO_ACTI' => $orders['ACTIVIDAD'] === '' ? null : $orders['ACTIVIDAD'],
- 'ORCO_PROY' => $orders['PROYECTO'] === '' || $orders['PROYECTO'] === 'NA' ? null : $orders['PROYECTO'],
- 'ORCO_NULI' => $requestData['NUMERO_LINEA'],
- 'ORCO_USRE' => $user,
- 'ORCO_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'ORCO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
- ];
- try {
- $orderNumber = DB::table('S002V01TORCO')->insertGetId($arrInsert);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG003: Ocurrió un error al momento de insertar los datos en la base de datos.", $th->getMessage(), 500);
- }
- if ( !$orderNumber ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG004: Ocurrió un error al insertar los datos en la base de datos.", [], 500);
- }
- $arrUpdate = [
- 'LINE_ESTA' => 'En OC',
- 'LINE_USMO' => $user,
- 'LINE_FEMO' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
- ];
- try {
- $validateInsert = DB::table('S002V01TLINE')
- ->where('LINE_IDLI', '=', $requestData['NUMERO_SOLICITUD'])
- ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
- ->update($arrUpdate);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG005: Ocurrió un error al momento de insertar los datos en la base de datos.", [], 500);
- }
- if ( !$validateInsert ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG006: Ocurrió un error al insertar los datos en la base de datos.", [], 500);
- }
- $arrInsertState = [
- 'HIOR_NUOR' => $orderNumber,
- 'HIOR_POEN' => 10,
- 'HIOR_NULI' => $requestData['NUMERO_LINEA'],
- 'HIOR_USRE' => $user,
- 'HIOR_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'HIOR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
- ];
- try {
- $validateInsertUpdate = DB::table('S002V01THIOR')->insert($arrInsertState);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG007: Ocurrió un error al momento de insertar los datos en el historial de estados.", [], 500);
- }
- if ( !$validateInsertUpdate ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_REG008: Ocurrió un error al insertar los datos del historial en la base de datos.", [], 500);
- }
- }
- DB::commit();
- return $this->responseController->makeResponse(false, "ÉXITO: Generación de Órdenes Exitosas");
- }
- public function getOrderByNumber($order, $provider, $line){
- try {
- $order = $this->encController->decrypt($order);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_GET000: Ocurrió un error al obtener el usuario.", [], 500);
- }
- try {
- $provider = $this->encController->decrypt($provider);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDER_GET001: Ocurrió un error al obtener el usuario.", [], 500);
- }
- try {
- $orders = DB::table('S002V01TORCO')
- ->where('ORCO_NUOR', '=', $order)
- ->where('ORCO_NUPR', '=', $provider)
- ->where('ORCO_NULI', '=', $line)
- ->where('DESP_NULI', '=', $line)
- ->where('PROV_NULI', '=', $line)
- ->where('LINE_NULI', '=', $line)
- ->where('MEPA_NULI', '=', $line)
- ->where('ORCO_ESTA', '=', 'Activo')
- ->where('DESP_ESTA', '=', 'Activo')
- ->where('PROV_ESTA', '=', 'Activo')
- ->where('LINE_ESTA', '=', 'Activo')
- ->where('MEPA_ESTA', '=', 'Activo')
- ->join('S002V01TDESP', 'DESP_IDDE', '=', 'ORCO_NUDE')
- ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR')
- ->join('S002V01TLINE', 'LINE_IDLI', '=', 'ORCO_IDLI')
- ->join('S002V01TMEPA', 'MEPA_IDME', '=', 'LINE_IDME')
- ->first([
- 'ORCO_NUOR', // Número de Orden
- 'PROV_NUPR', // Número de Proveedor
- 'PROV_NOCO', // Nombre Comercial del Proveedor
- 'DESP_IDDE', // Número de Despacho
- 'DESP_NOMB', // Nombre del Despacho
- 'DESP_CALL', // Calle
- 'DESP_NUEX', // Número Exterior
- 'DESP_NUIN', // Número Interior
- 'DESP_COPO', // Código Postal
- 'DESP_COLO', // Colonia
- 'DESP_MUNI', // Municipio
- 'DESP_ENTI', // Entidad
- 'DESP_PAIS', // Pais
- 'LINE_IDLI', // Identificador de línea de solicitud de compra
- // 'LINE_DESC', // Descripción de la línea de solicitud de compra
- 'LINE_IDME', // Métodos de Pago
- 'MEPA_NOMB', // Nombre del método de pago
- 'ORCO_COST', // Costo Total
- 'ORCO_MONE', // Moneda
- // 'ORCO_PROP', // Proposito
- // 'ORCO_ACTI', // Actividad
- 'ORCO_PROY', // Proyecto
- 'ORCO_ESTA', // Estado
- 'ORCO_USRE', // Usuario Registra
- 'ORCO_FERE', // Fecha Registra
- 'ORCO_USMO', // Usuario Modifica
- 'ORCO_FEMO', // Fecha Modifica
- ]);
- } catch ( \Throwable $th ) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDER_GET002: Ocurrió un error al momento de obtener las órdenes de compra.",
- $th->getMessage(),
- 500
- );
- }
- if ( !empty($orders) ) {
- try {
- $arrArtitleSelected = DB::table('S002V01TARSE')
- ->where('ARSE_IDLI', '=', $orders->LINE_IDLI)
- ->where('ARSE_NUPR', '=', $provider)
- ->where('ARSE_NULI', '=', $line)
- ->where('ARTI_NULI', '=', $line)
- ->where('INAR_NULI', '=', $line)
- ->where('DEAR_NULI', '=', $line)
- ->where('ARSE_ESTA', '=', 'Activo')
- ->where('ARTI_ESTA', '=', 'Activo')
- ->where('INAR_ESTA', '=', 'Activo')
- ->where('DEAR_ESTA', '=', 'Activo')
- ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'ARSE_IDAR')
- ->join('S002V01TINAR', 'INAR_IDIN', '=', 'ARSE_IDIN')
- ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
- ->get([
- 'ARSE_IDAS', // Identificador de artículos seleccionados
- 'ARTI_IDAR', // Identificador del artículo
- 'ARTI_IDFA', // Identificador de la familia
- 'ARTI_IDSU', // Identificador de la subfamilia
- 'ARTI_CODI', // Código del artículo
- 'ARTI_NOMB', // Nombre del artículo
- 'ARSE_NUPR', // Número de Identificador del Proveedor
- 'ARSE_IDIN', // Número de Identificador de Información
- 'ARSE_CANT', // Cantidad seleccionada
- 'ARSE_PRTO', // Precio total
- 'ARSE_USRE', // Usuario registra
- 'ARSE_FERE', // Fecha registra
- 'ARSE_USMO', // Usuario modifica
- 'ARSE_FEMO', // Fecha modifica
- 'INAR_CODI', // Código del artículo
- 'INAR_MODE', // Modelo del artículo
- 'INAR_MONE', // Moneda
- 'INAR_PREC', // Precio
- 'INAR_CARA', // Características
- 'DEAR_IDDE', // Identificador de la descripción del artículo
- 'DEAR_DESC', // Descripción del artículo
- 'DEAR_CARA', // Características del proveedor
- 'DEAR_COWE', // Compra Web
- 'DEAR_IMAG', // Imágen del artículo
- 'DEAR_IDUN', // Identificador de la unidad
- 'DEAR_NUPR', // Número del Proveedor
- 'DEAR_IDAR', // Identificador del artícul
- ]);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDER_GET003: Ocurrió un error al momento de obtener la información de la línea de solicitud de compra",
- $th->getMessage(),
- 500
- );
- }
- $arrArtitleSelected = json_decode(json_encode($arrArtitleSelected), true);
- foreach ($arrArtitleSelected as $key => $artitleSelected) {
- $artitleSelected['DEAR_IMAG'] = json_decode($artitleSelected['DEAR_IMAG']);
- // $artitleSelected['DEAR_IMAG'] = json_decode($artitleSelected['DEAR_IMAG']);
- $arrArtitleSelected[$key] = $artitleSelected;
- }
- $orders->PRODUCTS = $arrArtitleSelected;
- try {
- $arrStateOrder = DB::table('S002V01THIOR')
- ->where('HIOR_NUOR', '=', $order)
- ->where('HIOR_ESTA', '=', 'Activo')
- ->where('HIOR_NULI', '=', $line)
- ->get([
- 'HIOR_IDHO', // Identificador del historial de órdenes
- 'HIOR_NUOR', // Número de orden de compra
- 'HIOR_ESOR', // Estado de la orden
- 'HIOR_EVI1', // Evidencia 1
- 'HIOR_EVI2', // Evidencia 2
- 'HIOR_DESC', // Descripción
- 'HIOR_POEN', // Porcentaje de entrega
- 'HIOR_USRE', // Usuario entrega
- 'HIOR_FERE', // Fecha entrega
- 'HIOR_USMO', // Usuario modifica
- 'HIOR_FEMO', // Fecha modifica
- ]);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDER_GET004: Ocurrió un error al momento de obtener la información del historial de orden de compra",
- $th->getMessage(),
- 500
- );
- }
- $orders->STATES = $arrStateOrder;
- }
- return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $orders);
- }
- public function getHistoryStateOrder($order, $line) {
- try {
- $objHistoryState = DB::table('S002V01THIOR')
- ->where('HIOR_NUOR', '=', $order)
- ->where('HIOR_NULI', '=', $line)
- ->where('HIOR_ESTA', '=', 'Activo')
- ->first([
- 'HIOR_IDHO', // Identificador de la historia de la orden
- 'HIOR_ESOR', // Estado de la orden
- 'HIOR_DESC', // Descripción del estado de la orden
- 'HIOR_EVI1', // Evidencia 1
- 'HIOR_EVI2', // Evidencia 2
- 'HIOR_POEN', // Porcentaje de entrega
- ]);
- } catch (\Throwable $th) {
- //throw $th;
- }
- }
- public function updateStateHistory(Request $request) {
- $validator = Validator::make($request->all(), [
- 'ESTADO' => 'required|string',
- 'DESCRIPCION' => 'required|string',
- 'EVIDENCIA1' => 'required|string',
- 'NOMBRE_IMAGEN1' => 'string',
- // 'EVIDENCIA2' => 'string',
- // 'NOMBRE_IMAGEN2' => 'string',
- 'PORCENTAJE' => 'required|integer',
- 'NUMERO_ORDEN' => 'required|string',
- 'NUMERO_LINEA' => 'required|string',
- 'USUARIO' => 'required|string',
- ]);
- if ($validator->fails()) {
- return $this->responseController->makeResponse(
- true,
- "ERR_ORDERSTATE_REG000: Se encontraron uno o más errores.",
- $this->responseController->makeErrors($validator->errors()->messages()),
- 401
- );
- }
- DB::beginTransaction();
- $requestData = $request->all();
- $imageEvidence1 = null;
- $arrResponseImage = $this->resourcesController->saveImage( $requestData['EVIDENCIA1'], '/app/public/GEAD', $requestData['NOMBRE_IMAGEN1'], $requestData['NUMERO_LINEA'] );
- if ( $arrResponseImage['error'] ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, $arrResponseImage['msg'], $arrResponseImage['response'], 500);
- }
- $imageEvidence1 = $arrResponseImage['response'];
- $imageEvidence2 = null;
- if ( $requestData['EVIDENCIA2'] != '' && $requestData['EVIDENCIA2'] != null ) {
- $arrResponseImage = $this->resourcesController->saveImage( $requestData['EVIDENCIA2'], '/app/public/GEAD', $requestData['NOMBRE_IMAGEN2'], $requestData['NUMERO_LINEA'] );
- if ( $arrResponseImage['error'] ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, $arrResponseImage['msg'], $arrResponseImage['response'], 500);
- }
- $imageEvidence2 = $arrResponseImage['response'];
- }
- try {
- $user = $this->encController->decrypt($requestData['USUARIO']);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDERSTATE_REG001: Ocurrió un error al obtener el usuario.", [], 500);
- }
- $arrInsert = [
- 'HIOR_NUOR' => $requestData['NUMERO_ORDEN'],
- 'HIOR_ESOR' => $requestData['ESTADO'],
- 'HIOR_DESC' => $requestData['DESCRIPCION'],
- 'HIOR_EVI1' => $imageEvidence1,
- 'HIOR_EVI2' => $imageEvidence2,
- 'HIOR_POEN' => $requestData['PORCENTAJE'],
- 'HIOR_NULI' => $requestData['NUMERO_LINEA'],
- 'HIOR_USRE' => $user,
- 'HIOR_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'HIOR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
- ];
- try {
- $validateInsert = DB::table('S002V01THIOR')->insert($arrInsert);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDERSTATE_REG002: Ocurrió un error al momento de insertar los datos.", [], 500);
- }
- if ( !$validateInsert ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDERSTATE_REG003: No se pudo insertar los datos a la tabla.", [], 500);
- }
- $arrUpdate = [
- 'ORCO_ESTA' => $requestData['ESTADO'],
- 'ORCO_USMO' => $user,
- 'ORCO_FEMO' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- ];
- try {
- $validateUpdate = DB::table('S002V01TORCO')
- ->where('ORCO_NUOR', '=', $requestData['NUMERO_ORDEN'])
- ->where('ORCO_NULI', '=', $requestData['NUMERO_LINEA'])
- ->update($arrUpdate);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_ORDERSTATE_REG004: Ocurrió un error al momento de modificar los datos.", [], 500);
- }
- if ( !$validateUpdate ) {
- DB::rollBack();
- return $this->responseController->makeRespÑonse(true, "ERR_ORDERSTATE_REG005: No se pudo modificar los datos a la tabla.", [], 500);
- }
- DB::commit();
- return $this->responseController->makeResponse(false, "ÉXITO: Modificación de Estado Exitoso");
- }
- public function reorderArtitles(Request $request) {
- $validator = Validator::make($request->all(), [
- 'ORDEN' => 'required|string',
- 'DESCRIPCION' => 'required|string',
- 'USUARIO' => 'required|string',
- 'NUMERO_LINEA' => 'required|string',
- ]);
- if ($validator->fails()) {
- return $this->responseController->makeResponse(
- true,
- "ERR_REORDER_REG000: Se encontraron uno o más errores.",
- $this->responseController->makeErrors($validator->errors()->messages()),
- 401
- );
- }
- DB::beginTransaction();
- $requestData = $request->all();
- try {
- $user = $this->encController->decrypt($requestData['USUARIO']);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG001: Ocurrió un error al obtener el usuario.", [], 500);
- }
- try {
- $order = $this->encController->decrypt($requestData['ORDEN']);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG002: Ocurrió un error al obtener el número de orden.", [], 500);
- }
- try {
- $idRegisterLine = DB::table('S002V01TLINE')->insertGetId([
- // 'LINE_DESC' => $request['DESCRIPCION'],
- 'LINE_NULI' => $request['NUMERO_LINEA'],
- 'LINE_USRE' => $user,
- 'LINE_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
- ]);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG003: Ocurrió un error al hacer la inserción en la base.", $th->getMessage(), 500);
- }
- if ( !$idRegisterLine ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG004: Ocurrió un error al hacer la inserción en la base.", [], 500);
- }
- try {
- $arrArtitles = DB::table('S002V01TORCO')
- ->where('ORCO_NUOR', '=', $order)
- ->join('S002V01TARSE', function (JoinClause $join) {
- $join->on('ARSE_IDLI', '=', 'ORCO_IDLI')
- ->on('ARSE_NUPR', '=', 'ORCO_NUPR');
- })
- ->get([
- 'ARSE_IDAR', // Identificador del artículo
- 'ARSE_NUPR', // Número del proveedor
- 'ARSE_IDIN', // Identificador de la información del artículo
- 'ARSE_CANT', // Cantidad
- 'ARSE_PRTO', // Precio total
- ]);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG005: No se pudo obtener la información de la orden.", $th->getMessage(), 500);
- }
- if ( $arrArtitles->isEmpty() ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG006: La orden no tiene artículos.", [], 500);
- }
- foreach ($arrArtitles as $keyArtitle => $artitle) {
- try {
- $validateInsert = DB::table('S002V01TARSE')->insert([
- 'ARSE_IDAS' => $keyArtitle + 1,
- 'ARSE_IDLI' => $idRegisterLine,
- 'ARSE_IDAR' => $artitle->ARSE_IDAR,
- 'ARSE_NUPR' => $artitle->ARSE_NUPR,
- 'ARSE_IDIN' => $artitle->ARSE_IDIN,
- 'ARSE_CANT' => $artitle->ARSE_CANT,
- 'ARSE_PRTO' => $artitle->ARSE_PRTO,
- 'ARSE_NULI' => $request['NUMERO_LINEA'],
- 'ARSE_USRE' => $user,
- 'ARSE_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
- ]);
- } catch (\Throwable $th) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG007: Ocurrió un error al hacer la inserción en la base.", $th->getMessage(), 500);
- }
- if ( !$validateInsert ) {
- DB::rollBack();
- return $this->responseController->makeResponse(true, "ERR_REORDER_REG008: Ocurrió un error al hacer la inserción en la base.", [], 500);
- }
- }
- DB::commit();
- return $this->responseController->makeResponse(false, "ÉXITO: Artículos Reordenados Exitosamente");
- }
- public function generateSheetAcquisition($encOrderNumber, $encUser, $line) {
- try {
- $orderNumber = $this->encController->decrypt($encOrderNumber);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG000: Ocurrió un error al obtener la ordens.", $th->getMessage(), 500);
- }
- try {
- $user = $this->encController->decrypt($encUser);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG001: Ocurrió un error al obtener la ordens.", $th->getMessage(), 500);
- }
- try {
- $getOrder = DB::table('S002V01TORCO')
- ->where('ORCO_NUOR', '=', $orderNumber)
- ->where('ORCO_NULI', '=', $line)
- ->where('PROV_NULI', '=', $line)
- ->where('DESP_NULI', '=', $line)
- ->where('LINE_NULI', '=', $line)
- ->where('MEPA_NULI', '=', $line)
- ->where('ORCO_ESTA', '=', 'Activo')
- ->where('PROV_ESTA', '=', 'Activo')
- ->where('DESP_ESTA', '=', 'Activo')
- ->where('LINE_ESTA', '=', 'Activo')
- ->where('MEPA_ESTA', '=', 'Activo')
- ->join('S002V01TPROV', 'PROV_NUPR', '=', 'ORCO_NUPR')
- ->join('S002V01TDESP', 'DESP_IDDE', '=', 'ORCO_NUDE')
- ->join('S002V01TLINE', 'LINE_IDLI', '=', 'ORCO_IDLI')
- ->join('S002V01TMEPA', 'MEPA_IDME', '=', 'LINE_IDME')
- ->first([
- 'ORCO_NUOR', // Número de Orden
- 'ORCO_COST', // Costo Total
- 'ORCO_MONE', // Moneda
- 'ORCO_PROY', // Proyecto
- 'ORCO_ESTA', // Estado
- 'ORCO_USRE', // Usuario Registra
- 'ORCO_FERE', // Fecha Registra
- 'ORCO_USMO', // Usuario Modifica
- 'ORCO_FEMO', // Fecha Modifica
- // ------------------------------------------------------
- 'PROV_NUPR', // Número de proveedor
- 'PROV_NOCO', // Nombre comercial del proveedor
- 'PROV_NOMB', // Nombre del proveedor
- 'PROV_APPA', // Apellido paterno del proveedor
- 'PROV_APMA', // Apellido materno del proveedor
- 'PROV_CORR', // Correo
- 'PROV_LAD1', // Lada 1
- 'PROV_TEL1', // Teléfono 1
- 'PROV_LAD2', // Lada 2
- 'PROV_TEL2', // Teléfono 2
- 'PROV_XRFC', // R.F.C.
- 'PROV_XTAX', // T.A.X ID
- 'PROV_GIRO', // Giro empresarial
- 'PROV_TIPO', // Tipo de proveedor
- 'PROV_SIWE', // Sitio web del proveedor
- 'PROV_MEPA', // Método de pago del proveedor
- // ------------------------------------------------------
- 'DESP_IDDE', // Número de despacho
- 'DESP_NOMB', // Nombre del despacho
- 'DESP_CALL', // Calle
- 'DESP_NUEX', // Número exterior
- 'DESP_NUIN', // Número interor
- 'DESP_COPO', // Código Postal
- 'DESP_COLO', // Colonia
- 'DESP_MUNI', // Municipio
- 'DESP_ENTI', // Entidad
- 'DESP_PAIS', // Pais
- // ------------------------------------------------------
- 'LINE_IDLI', // Número de línea de solicitud
- // 'LINE_DESC', // Descripción
- 'LINE_IDME', // Método de pago
- 'LINE_COME', // Comentarios
- // ------------------------------------------------------
- 'MEPA_NOMB',
- ]);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG002: Ocurrió un error al obtener la información.", $th->getMessage(), 500);
- }
- $getOrder = (array) $getOrder;
- try {
- $getStateOrder = DB::table('S002V01THIOR')
- ->where('HIOR_NUOR', '=', $getOrder['ORCO_NUOR'])
- ->where('HIOR_NULI', '=', $line)
- ->get([
- 'HIOR_IDHO', //
- 'HIOR_NUOR', //
- 'HIOR_ESOR', //
- 'HIOR_DESC', //
- 'HIOR_EVI1', //
- 'HIOR_EVI2', //
- 'HIOR_POEN', //
- 'HIOR_ESTA', //
- 'HIOR_NULI', //
- 'HIOR_INEX', //
- 'HIOR_USRE', //
- 'HIOR_FERE', //
- 'HIOR_USMO', //
- 'HIOR_FEMO', //
- ]);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG003: Ocurrió un error al obtener la información.", $th->getMessage(), 500);
- }
- $mpdf = new PDF( [
- 'mode' => 'utf-8',
- 'format' => 'A4',
- 'margin_header' => '3',
- 'margin_top' => '20',
- 'margin_bottom' => '20',
- 'margin_footer' => '2',
- ]);
- $mpdf->SetHTMLHeader('
- <div style="display:flex; align-items: center; text-align: right;">
- <img src="data:image/png;base64,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" width="100">
- </div>
- ');
-
- $mpdf->WriteHTML('<b>Número de Orden:</b> '.$getOrder['ORCO_NUOR'] );
- $mpdf->WriteHTML('<b>Costo Total:</b> $'.$getOrder['ORCO_COST'].' '.$getOrder['ORCO_MONE']);
- if ($getOrder['ORCO_PROY'] != null) {
- $mpdf->WriteHTML('<b>Proyecto:</b> '.$getOrder['ORCO_PROY']);
- }
- $mpdf->WriteHTML('<b>Estado:</b> '.$getOrder['ORCO_ESTA']);
-
- $htmlTable = '<br><table border="1"><thead><tr>
- <th>Número de Estado</th>
- <th>Estado de la Orden</th>
- <th>Descripción</th>
- <th>Porcentaje</th>
- <th>Usuario de Registro</th>
- <th>Fecha de Registro</th>
- </tr></thead><tbody>';
- foreach ($getStateOrder as $key => $stateOrder) {
- $stateOrder = (array) $stateOrder;
- $htmlTable .= '<tr>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_IDHO'].'</td>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_ESOR'].'</td>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_DESC'].'</td>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_POEN'].'%</td>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_USRE'].'</td>';
- $htmlTable .= '<td>'.$stateOrder['HIOR_FERE'].'</td>';
- $htmlTable .= '</tr>';
- }
- $htmlTable .= '</tbody></table>';
- $mpdf->WriteHTML($htmlTable);
- $mpdf->WriteHTML('<hr>');
- $mpdf->WriteHTML('<b>Número de Solicitud de Compra:</b> '.$getOrder['LINE_IDLI']);
- // $mpdf->WriteHTML('<b>Descripción '.$getOrder['LINE_DESC']);
- $mpdf->WriteHTML('<b>Método de Pago:</b> '.$getOrder['MEPA_NOMB']);
- $mpdf->WriteHTML('<b>Comentarios:</b> '.$getOrder['LINE_COME']);
- $mpdf->WriteHTML('<hr>');
- $mpdf->WriteHTML('<b>Número de Proveedor:</b> '.$getOrder['PROV_NUPR']);
- $mpdf->WriteHTML('<b>Nombre Comercial:</b> '.$getOrder['PROV_NOCO']);
- $mpdf->WriteHTML('<b>Nombre:</b> '.$getOrder['PROV_NOMB'].' '.$getOrder['PROV_APPA'].' '.$getOrder['PROV_APMA']);
- $mpdf->WriteHTML('<b>Correo:</b> '.$getOrder['PROV_CORR']);
- $mpdf->WriteHTML('<b>Teléfono Principal:</b> +'.$getOrder['PROV_LAD1'].' '.$getOrder['PROV_TEL1']);
- if ($getOrder['PROV_TEL2'] != null) {
- $mpdf->WriteHTML('<b>Teléfono Secundario:</b> +'.$getOrder['PROV_LAD2'].' '.$getOrder['PROV_TEL2']);
- }
- if ($getOrder['PROV_XRFC'] != null) {
- $mpdf->WriteHTML('<b>R.F.C:</b> '.$getOrder['PROV_XRFC']);
- }
- if ($getOrder['PROV_XTAX'] != null) {
- $mpdf->WriteHTML('<b>TAX ID:</b> '.$getOrder['PROV_XTAX']);
- }
- $mpdf->WriteHTML('<b>Giro Empresarial:</b> '.$getOrder['PROV_GIRO']);
- $mpdf->WriteHTML('<b>Tipo de Proveedor:</b> '.$getOrder['PROV_TIPO']);
- $mpdf->WriteHTML('<b>Sitio '.$getOrder['PROV_SIWE']);
- $mpdf->WriteHTML('<hr>');
- $mpdf->WriteHTML('<b>Número de Despacho:</b> '.$getOrder['DESP_IDDE']);
- $mpdf->WriteHTML('<b>Nombre del Despacho:</b> '.$getOrder['DESP_NOMB']);
- $mpdf->WriteHTML('<b>Dirección:</b> '.$getOrder['DESP_CALL'].', '.$getOrder['DESP_NUEX'].''.$getOrder['DESP_NUIN'].', '.$getOrder['DESP_COPO'].', '.$getOrder['DESP_COLO'].', '.
- $getOrder['DESP_MUNI'].', '.$getOrder['DESP_ENTI'].', '.$getOrder['DESP_PAIS']);
-
- $contentFile = $mpdf->Output('', "S");
- $base64File = base64_encode($contentFile);
- try {
- $arrResponse = $this->resourcesController->saveDocument($base64File, 'GEAD','FICHA_ADQUISICION_'.$getOrder['ORCO_NUOR'].'.pdf','IN',$line);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG004: Ocurrió un error al obtener la información.", $th->getMessage(), 500);
- }
- if ($arrResponse['error']) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG005: Ocurrió un error al obtener la información.", [], 500);
- }
- try {
- $validateInsert = DB::table('S002V01TDOOR')->insert([
- 'DOOR_NUOR' => $getOrder['ORCO_NUOR'],
- 'DOOR_CODO' => $arrResponse['response'],
- 'DOOR_DESC' => 'Ficha',
- 'DOOR_TIPO' => 'IN',
- 'DOOR_NULI' => $line,
- 'DOOR_USRE' => $user,
- 'DOOR_FERE' => Carbon::now()->timezone('America/Mazatlan')->toDateTimeString(),
- 'DOOR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
- ]);
- } catch (\Throwable $th) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG006: Ocurrió un error al ingresar la ficha.", $th->getMessage(), 500);
- }
- if (!$validateInsert) {
- return $this->responseController->makeResponse(true, "ERR_GENERATE_SHEET_REG007: No se pudo ingresar la ficha.", [], 500);
- }
- return $this->responseController->makeResponse(false, "ÉXITO: Ficha Exitosa", $arrResponse['response']);
- }
- }
|