コード例 #1
0
ファイル: triggers.php プロジェクト: elcuy/Novopan
function reclamoFinalizado($requestId)
{
    $messageArray = array("message_value" => "Solicitud finalizada con éxito!", "message_type" => "success");
    $user = User::getLoggedUser();
    $request = Request::with(['attachments' => function ($query) use($user) {
        return $query->where('attachment_filetype', \FlowSettingsCore::get($user->user_lastflow, 'REC_ATT_ARCHIVO_NC'));
    }])->find($requestId);
    $creator = User::find($request->request_createdby);
    $attachment_array = [];
    $attachment = $request->attachments->last();
    if ($attachment) {
        $attachment_array[] = APP_ENVPATH . '/attachments/requests/' . $attachment->attachment_name;
    }
    // Actualizar fecha de cierre
    $reclamo = Reclamo::where('ef_id', $requestId)->first();
    $reclamo->reclamo_fecha_fin = date("Y-m-d H:i:s");
    $reclamo->save();
    // Enviar mail a cliente
    $email = \RequestMetadataCore::get($requestId, "REC-EMAIL-CONTACTO");
    $subject = "AVISO: Reclamo finalizado";
    $emailContent = view('Reclamos.Emails.reclamo_finalizado', compact('request', 'reclamo'));
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        MailController::sendGeneralMail([["email" => $email], ["email" => $creator->user_email]], $subject, $emailContent, [], [], $attachment_array);
    }
    return $messageArray;
}
コード例 #2
0
ファイル: reportCruceATS.php プロジェクト: elcuy/Novopan
function getStandardReportData($filterHeaderArray, $outputType)
{
    $daoHandler = new DAO();
    require_once APP_BASEPATH . "/includes/Entities/Task/TaskCore.php";
    require_once APP_BASEPATH . "/includes/Entities/User/UserCore.php";
    require_once APP_BASEPATH . "/includes/Entities/FlowSettings/FlowSettingsCore.php";
    require_once APP_BASEPATH . "/includes/Entities/RequestMetadata/RequestMetadataCore.php";
    require_once $_SESSION["environment_path"] . "/customcode/RecepcionDocumentos/includes/Entities/DocumentoCabecera/DocumentoCabeceraCore.php";
    require_once $_SESSION["environment_path"] . "/customcode/RecepcionDocumentos/includes/Entities/DocumentoLinea/DocumentoLineaCore.php";
    require_once $_SESSION["environment_path"] . "/customcode/RecepcionDocumentos/includes/Entities/DistribucionCabecera/DistribucionCabeceraCore.php";
    require_once $_SESSION["environment_path"] . "/customcode/RecepcionDocumentos/includes/Entities/DistribucionLinea/DistribucionLineaCore.php";
    $flowSettingsHandler = new FlowSettingsCore();
    $handlerTaskCore = new TaskCore();
    $handlerRequestMetadataCore = new RequestMetadataCore();
    $flow = $_SESSION["user_flow"];
    $step = $flowSettingsHandler->getSettingValue($_SESSION["user_flow"], "RDE_STEP_PROC_CONTABLE");
    $sql = "select\t\tCONCAT(docc.estab, '-', docc.ptoEmi, '-', docc.secuencial) documento,\r\n\t\t\t\t\t\t\tdocc.fechaEmision fecha,\r\n\t\t\t\t\t\t\tdocc.tipo_doc,\r\n\t\t\t\t            docc.ruc ruc, \r\n\t\t\t\t            docc.razonSocial nombre,\r\n\t\t\t\t            docc.ef_id ef_id\r\n\r\n\t\t\t\tfrom \t\trde_documento docc\r\n\t\t\t\twhere \t\t?\r\n\t\t\t\tand \t\tdocc.tipo_doc = 'FAC' \t";
    // Build filters
    foreach ($filterHeaderArray as $headerRecord) {
        if ($headerRecord["field_filtered"] == 1) {
            if ($headerRecord["field_data_type"] != "date") {
                $sql .= " AND " . $headerRecord["field_filter_string"] . " BETWEEN " . $headerRecord["field_min"] . " AND " . $headerRecord["field_max"] . " ";
            } else {
                $start_date = $headerRecord["field_min"] . " 00:00:00";
                $end_date = $headerRecord["field_max"] . " 23:59:59";
            }
        }
    }
    $daoHandler->resetDAO();
    $daoHandler->setQuery($sql);
    $daoHandler->setParameter('i', 1);
    $reportData = $daoHandler->executeQuery();
    foreach ($reportData as &$record) {
        $record["registrada_ats"] = "";
        unset($record["ef_id"]);
    }
    return $reportData;
}
コード例 #3
0
ファイル: WSAprobacionTarea.php プロジェクト: elcuy/Novopan
function crearSolicitudTarea($tipo, $id, $fecha_inicio, $fecha_fin, $titulo, $descripcion, $encargado, $prioridad, $proyeccion, $url)
{
    LogController::logWebServiceIn('Llamada a web service: ' . __FILE__ . ' - ' . __FUNCTION__, compact('tipo', 'id', 'fecha_inicio', 'fecha_fin', 'titulo', 'descripcion', 'encargado', 'prioridad', 'proyeccion', 'url'));
    $returnMessage = "";
    $handlerAttachmentCore = new AttachmentCore();
    $handlerRequestCore = new RequestCore();
    $handlerUserCore = new UserCore();
    $handlerFlowSettingsCore = new FlowSettingsCore();
    // Tomar datos de aprobador
    $flow = Flow::find(FLOW_TAREAS);
    $creador = User::find($encargado);
    if ($creador) {
        $jefe = User::find($creador->user_reports_to);
        if (!$jefe) {
            $jefe = User::find($flow->flow_administrator);
        }
        // Crear solicitud
        $request_flow = $flow->flow_id;
        $request_id = $handlerRequestCore->getLastGeneralRequestId() + 1;
        $inner_request_id = $handlerRequestCore->getLastGeneralRequestId($request_flow) + 1;
        $request_name = "Aprobación: " . $titulo;
        $request_description = "Aprobación de tarea: " . $descripcion;
        $request_createdby = $creador->user_id;
        $request_assignedto = $jefe->user_id;
        $handlerRequestCore->createNewRequest($request_id, $inner_request_id, $request_flow, $request_name, $request_description, $request_createdby, $request_assignedto);
        Tarea::create(["ef_id" => $request_id, "ext_id" => $id, "tipo" => $tipo, "titulo" => $titulo, "descripcion" => $descripcion, "encargado" => $request_createdby, "aprobador_1" => $request_assignedto, "aprobador_2" => "", "fecha_inicio" => $fecha_inicio, "fecha_fin" => $fecha_fin, "prioridad" => $prioridad, "proyeccion" => $proyeccion]);
        RequestMetadataCore::set($request_id, "APR-DOBLE-APROBACION", "No");
        RequestMetadataCore::set($request_id, "APR-APROBADO", "No");
        RequestMetadataCore::set($request_id, "APR-COMENTARIO", "");
        //Tomar archivo de campo url y adjuntar
        if ($url != '') {
            $tmpFileName = basename($url);
            file_put_contents($tmpFileName, fopen($url, 'r'));
            $filetype = FlowSettingsCore::get($request_flow, "APR_FILE_ADJUNTO");
            $handlerAttachmentCore->addAttachmentToRequest($request_id, $filetype, dirname(__FILE__) . "/" . $tmpFileName, $_SESSION["environment_path"], "admin", "Adjunto de tarea");
        }
    } else {
        $returnMessage = "ERROR: Usuario " . $encargado . " no existe en BPM. Imposible continuar";
    }
    return $returnMessage;
}
コード例 #4
0
ファイル: WSReclamos.php プロジェクト: elcuy/Novopan
function agregarNotaCreditoReclamo($reclamo_id, $tipo, $numero, $fecha, $monto, $concepto, $rma, $pedido, $url)
{
    LogController::logWebServiceIn('Llamada a web service: ' . __FILE__ . ' - ' . __FUNCTION__, compact('reclamo_id', 'tipo', 'numero', 'fecha', 'monto', 'concepto', 'rma', 'pedido', 'url'));
    try {
        $reclamo = Reclamo::find($reclamo_id);
        $nc = NotaCredito::create(['reclamo_id' => $reclamo_id, 'tipo' => $tipo, 'numero' => $numero, 'fecha' => $fecha, 'monto' => $monto, 'concepto' => $concepto, 'rma' => $rma, 'pedido' => $pedido]);
        if ($url) {
            $urlArray = explode('.', $url);
            $filename = APP_TMPPATH . "tmpdoc." . end($urlArray);
            $url_file = fopen($url, 'r');
            if ($url_file) {
                file_put_contents($filename, $url_file);
                $descripcion = $tipo == 'nc' ? 'Nota de Crédito - ' . $numero : 'Nota de Débito - ' . $numero;
                (new \AttachmentCore())->addAttachmentToRequest($reclamo->ef_id, \FlowSettingsCore::get(FLOW_RECLAMOS, 'REC_ATT_ARCHIVO_NC'), $filename, APP_ENVPATH, 'admin', 'Nota de crédito / débito subida desde el módulo externo');
            }
        }
    } catch (Exception $e) {
        LogController::logWebServiceIn('Error de webservice: ' . $e->getMessage());
        return 'Error: ' . $e->getMessage();
    }
    return '';
}
コード例 #5
0
 /**
  * Consolida las requisiciones correspondientes y mueve las solicitudes en EF
  * @return Array
  */
 public function consolidarRequisiciones()
 {
     $returnArray = array('status' => true, 'message' => '');
     $input = Request::createFromGlobals();
     $requestCore = new \RequestCore();
     $flow = $_SESSION['user_flow'];
     $step = FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_CONSOLIDATION');
     $requisiciones = Requisicion::getRequisicionesParaConsolidar();
     $ordenescompra = OrdenCompra::getOrdenesCompraParaConsolidar();
     // Tomar la tarea actual, si no está completada salir
     foreach ($requisiciones as $requisicion) {
         if ($requisicion->asignada_totalmente == 0) {
             $returnArray['status'] = false;
             $returnArray['message'] = 'La requisición ' . $requisicion->id . ' no se encuentra asignada por completo. No se puede continuar';
             return $returnArray;
         }
     }
     // Cambiar estado de las ordenes de compra cuyas requisiciones estén totalmente asignadas
     foreach ($ordenescompra as $ordencompra) {
         $ordencompra->estado = 'C';
         $ordencompra->save();
     }
     foreach ($requisiciones as $requisicion) {
         // Solo completar tareas de requisiciones asignadas totalmente
         if ($requisicion->asignada_totalmente == 1) {
             // Cambiar estado a 'C' (Consolidada)
             $requisicion->estado = 'C';
             $requisicion->save();
             $task = $requisicion->ef_request->open_tasks[0];
             // Completar tareas diferentes a la actual
             // (No se completa la actual porque EF lo hace por default)
             if ($task->task_id != $input->task_id) {
                 $requestCore->completeTask($task->task_request, $task->task_id, $input->flow_id, $input->step_id, $input->user_id, 'Requisición consolidada por el usuario ' . $_SESSION['user_id'], 'next');
             }
         }
     }
     return $returnArray;
 }
コード例 #6
0
 public function generarPDF()
 {
     $input = Request::createFromGlobals();
     $requisicion = Requisicion::findByEFID($input->request_id);
     $filename = APP_TMPPATH . 'requisicion.pdf';
     PDFController::generatePDF(view('Adquisiciones.PDF.requisicion', ['requisicion' => $requisicion]), false, $filename);
     (new \AttachmentCore())->addAttachmentToRequest($input->request_id, \FlowSettingsCore::get(FLOW_ADQUISICIONES, 'ADQ_FILE_REQUISICION'), $filename, APP_ENVPATH, $_SESSION['user_id'], "Requisición " . $requisicion->id);
     return array("status" => true, "message" => "");
 }
コード例 #7
0
ファイル: crear_reclamo.php プロジェクト: elcuy/Novopan
require_once APP_BASEPATH . "/includes/Entities/Task/TaskCore.php";
require_once APP_BASEPATH . "/includes/Entities/Request/RequestCore.php";
require_once APP_BASEPATH . "/includes/Entities/RequestMetadata/RequestMetadataCore.php";
require_once APP_BASEPATH . "/includes/Entities/FlowSettings/FlowSettingsCore.php";
require_once APP_BASEPATH . "/includes/Entities/Attachment/AttachmentCore.php";
require_once APP_BASEPATH . "/includes/Entities/Filetype/FiletypeCore.php";
require_once $_SESSION["environment_path"] . "/customcode/Reclamos/includes/Entities/General/GeneralCore.php";
require_once $_SESSION["environment_path"] . "/customcode/Reclamos/includes/Entities/Clase/ClaseCore.php";
require_once $_SESSION["environment_path"] . "/customcode/Reclamos/includes/Entities/Reclamo/ReclamoCore.php";
require_once $_SESSION["environment_path"] . "/customcode/Reclamos/includes/Entities/ReclamoDetalle/ReclamoDetalleCore.php";
define("CURRENT_FLOW", "1");
$handlerRequestCore = new RequestCore();
$handlerReclamoCore = new ReclamoCore();
$handlerReclamoDetalleCore = new ReclamoDetalleCore();
$handlerRequestMetadataCore = new RequestMetadataCore();
$handlerFlowSettingsCore = new FlowSettingsCore();
$handlerAttachmentCore = new AttachmentCore();
$handlerFiletypeCore = new FiletypeCore();
$handlerGeneralCore = new GeneralCore();
$handlerClaseCore = new ClaseCore();
if ($_POST["cliente_pais"] == "ECU") {
    $tipo = "venta_local";
    $creador = $handlerFlowSettingsCore->getSettingValue(CURRENT_FLOW, "REC_PRO_USUARIO_VL");
    $asignado_a = $handlerFlowSettingsCore->getSettingValue(CURRENT_FLOW, "REC_PRO_USUARIO_VL");
} else {
    $tipo = "exportacion";
    $creador = $handlerFlowSettingsCore->getSettingValue(CURRENT_FLOW, "REC_PRO_USUARIO_EXP");
    $asignado_a = $handlerFlowSettingsCore->getSettingValue(CURRENT_FLOW, "REC_PRO_USUARIO_EXP");
}
$customStep = "";
if (isset($_POST["reclamo_extemporaneo"])) {
コード例 #8
0
ファイル: OrdenCompra.php プロジェクト: elcuy/Novopan
 /**
  * Devuelve las ordenes de compra que cumplan con las siguientes características
  *  - Que la ef_request de su requisición esté en el proceso de 'Adquisiciones'
  *  - Que la ef_request de su requisición esté en el paso de 'Recepción'
  *  - Que su estado sea 'G' (Generada)
  * @return Consolidaciones
  */
 public static function getOrdenesCompraParaRecepcion($ef_id)
 {
     // Filtro de estado
     $query = self::estado('G');
     // Filtro de status de solicitud EF
     $flow = FLOW_ADQUISICIONES;
     $step = FlowSettings::get($flow, 'ADQ_STEP_RECEPCION_OC');
     $query->whereHas('lineas.linea_requisicion.requisicion.ef_request.open_tasks', function ($query) use($flow, $step) {
         $query->whereTaskFlow($flow)->whereTaskStep($step);
     })->whereHas('lineas.linea_requisicion.requisicion', function ($query) use($ef_id) {
         return $query->whereEfId($ef_id);
     });
     $query->with(['proveedor', 'lineas.linea_requisicion.requisicion', 'lineas.producto', 'recepciones_efectivas', 'recepciones_planificadas']);
     return $query->get();
 }
コード例 #9
0
 public function AprobarCotizacion()
 {
     $input = Request::createFromGlobals();
     $returnArray = array("status" => true, "message" => "");
     $requestCore = new \RequestCore();
     $arrayRequisiciones = [];
     // Traer ordenes de compra
     $ordenes_compra = $this->getCotizaciones($input->request_id);
     foreach ($ordenes_compra as $orden_compra) {
         // Iterar las cotizaciones
         foreach ($orden_compra->cotizaciones as $cotizacion) {
             if ($cotizacion->estado == "S") {
                 // Depende del siguiente paso:
                 // - Si es selección de proveedor cambiar el estado de OC a 'I' - Ingresada
                 // - Si es generación de OC cambiar el estado a 'A' - Aprobada. Copiar cantidades de Cotización
                 if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) {
                     $cotizacion->ordencompra->update(['estado' => 'I']);
                 } else {
                     // Actualizar cabecera de OC
                     $cotizacion->ordencompra->update(['id_proveedor' => $cotizacion->contacto->id_proveedor, 'forma_pago' => $cotizacion->forma_pago, 'tiempo_entrega' => $cotizacion->tiempo_entrega, 'bodega' => FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_BODEGA_DEFAULT_OC"), 'id_aprobador_cotizacion' => $_SESSION['user_id'], 'id_aprobador_ordencompra' => $_SESSION['user_id'], 'estado' => 'A']);
                     // Actualizar líneas de OC
                     foreach ($cotizacion->lineas as $linea) {
                         $linea->linea_ordencompra->update(['cantidad' => $linea->cantidad, 'valor' => $linea->valor_unitario_final, 'observacion' => $linea->observacion, 'estado' => 'A']);
                     }
                 }
                 // Llenar arreglo con número de requisiciones correspondientes
                 foreach ($cotizacion->lineas as $linea) {
                     $arrayRequisiciones[] = $linea->linea_ordencompra->linea_requisicion->requisicion->id;
                 }
             }
         }
     }
     // Mover ef_requests correspondientes
     $arrayRequisiciones = array_unique($arrayRequisiciones);
     foreach ($arrayRequisiciones as $id_requisicion) {
         $requisicion = Requisicion::find($id_requisicion);
         $task = $requisicion->ef_request->open_tasks[0];
         // Completar tareas diferentes a la actual
         // (No se completa la actual porque EF lo hace por default)
         if ($task->task_id != $input->task_id) {
             // TODO: Este valor cambia de acuerdo al siguiente paso
             if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) {
                 $description = 'Cotización no aprobada';
             } else {
                 $description = 'Cotización aprobada por el usuario ' . $_SESSION['user_id'];
             }
             $requestCore->completeTask($task->task_request, $task->task_id, $input->flow_id, $input->step_id, $input->user_id, $description, 'next');
         }
     }
     return $returnArray;
 }
コード例 #10
0
ファイル: JobCopyPeriodoBPCS.php プロジェクト: elcuy/Novopan
<?php

use EasyFlow\Master\Models\Request;
use EasyFlow\Master\Models\Connector;
use EasyFlow\Master\Controllers\LogController;
require_once dirname(dirname(__DIR__)) . "/includes/configuration.php";
try {
    $periodosArray = [];
    $periodos_bpcs = Connector::connect(\FlowSettingsCore::get(FLOW_RECLAMOS, 'REC_CONN_PERIODOS_BPCS'));
    $first_request = Request::where('request_flow', FLOW_RECLAMOS)->first();
    $first_year = date('Y', strtotime($first_request->request_start_date));
    $first_month = date('m', strtotime($first_request->request_start_date));
    $first_date = strtotime($first_year . '-' . $first_month);
    foreach ($periodos_bpcs->data as $periodo) {
        if (strtotime($periodo['PLYEAR'] . '-' . $periodo['PLPERD']) >= $first_date) {
            $start = substr($periodo['PLSDAT'], 0, 4) . '-' . substr($periodo['PLSDAT'], 4, 2) . '-' . substr($periodo['PLSDAT'], 6, 2);
            $end = substr($periodo['PLEDAT'], 0, 4) . '-' . substr($periodo['PLEDAT'], 4, 2) . '-' . substr($periodo['PLEDAT'], 6, 2);
            $periodosArray[] = ['name' => 'Período BPCS: ' . $periodo['PLYEAR'] . '-' . $periodo['PLPERD'] . ' (Desde ' . $start . ' hasta ' . $end . ')', 'shortname' => $periodo['PLYEAR'] . '-' . $periodo['PLPERD'], 'start' => $start, 'end' => $end];
        }
    }
    // Write file
    file_put_contents(APP_ENVPATH . '/includes/InterfaceData/Periodos.json', json_encode($periodosArray));
} catch (Exception $e) {
    LogController::logCron('Error al ejecutar cron (JobDailyActionSummaryi.php)', ['error' => $e->getMessage()], 'ERROR');
    echo $e->getMessage();
}
コード例 #11
0
 public function generateRequestPDF()
 {
     $input = Request::createFromGlobals();
     $filename = APP_TMPPATH . 'requisicion.pdf';
     $reclamo = Reclamo::with(['clase', 'lineas', 'reclamo_causas.causa', 'reclamo_acciones.reclamos', 'reclamo_decision', 'reclamo_nc'])->whereEfId($input->request_id)->first();
     $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio);
     $dias_calendario = number_format($timeArray['total'] / 24, 2);
     $dias_laborable = number_format($timeArray['work'] / 8, 2);
     PDFController::generatePDF(view('Reclamos.PDF.reclamo', compact('reclamo', 'dias_calendario', 'dias_laborable')), false, $filename);
     (new \AttachmentCore())->addAttachmentToRequest($input->request_id, \FlowSettingsCore::get(FLOW_RECLAMOS, 'REC_ATT_ARCHIVO_PDF'), $filename, APP_ENVPATH, $_SESSION['user_id'], "Reclamo");
     return ["status" => true, "message" => ""];
 }
コード例 #12
0
 public function recibirOrdenCompra()
 {
     $input = Request::createFromGlobals();
     $handlerWebServiceCore = new WebServiceCore();
     $handlerRequestCore = new RequestCore();
     $requisicionesRecibidas = [];
     $recepcionesEfectivas = [];
     foreach ($input->lineas as $linea) {
         if ($linea['esta_recepcion'] > 0) {
             $linea_ordencompra = OrdenCompraLinea::with(['linea_requisicion.requisicion', 'producto'])->find($linea['id']);
             // Consumir Web Service de recepción haciendas
             if ($linea_ordencompra->linea_requisicion->requisicion->id_clase == 1) {
                 $wsdl = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_WSDL");
                 $operation = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_OPERATION");
                 $namespace = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_NAMESPACE");
                 $soapAction = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_SOAPACTION");
                 $params = ['Longvarchar' => json_encode(['HcHacId' => $linea_ordencompra->linea_requisicion->bodega_haciendas, 'Pro' => [['ProId' => $linea_ordencompra->producto->codigo, 'ProCan' => $linea['esta_recepcion']]]])];
                 $result = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true);
                 if (!$result) {
                     return 'Error al consumir servicio de Kardex. Imposible continuar';
                 }
                 if ($result['Gx_msg'] != '') {
                     return $result['Gx_msg'];
                 }
             }
             $recepcion_efectiva = RecepcionEfectiva::create(['id_ordencompra' => $linea['id_ordencompra'], 'id_ordencompra_linea' => $linea['id'], 'fecha' => date('Y-m-d'), 'cantidad' => $linea['esta_recepcion']]);
             if ($input->tipo_factura == 'fisica') {
                 $recepcion_efectiva->update(['num_documento' => $input->num_factura]);
             } else {
                 $recepcion_efectiva->update(['id_documento' => $input->factura]);
             }
             $recepcionesEfectivas[] = $recepcion_efectiva;
             $requisicionesRecibidas[$linea_ordencompra->linea_requisicion->requisicion->id][] = ['producto' => $linea_ordencompra->producto->codigo . ' - ' . $linea_ordencompra->producto->nombre, 'observacion' => $linea_ordencompra->linea_requisicion->observacion_creador, 'cantidad' => $linea['esta_recepcion']];
         }
     }
     // Validar si la orden se ha recibido completamente y actualizar estado
     $ordencompra = OrdenCompra::with(['lineas', 'recepciones_efectivas'])->find($input->id_ordencompra);
     $estado = 'T';
     foreach ($ordencompra->lineas as $linea) {
         if ($linea->cantidad_recibida < $linea->cantidad) {
             $estado = 'P';
             break;
         }
     }
     $ordencompra->update(['estado' => $estado]);
     // Consumir web service de recepción bpcs
     $ordencompra->fresh();
     $wsdl = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_WSDL");
     $operation = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_OPERATION");
     $namespace = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_NAMESPACE");
     $soapAction = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_SOAPACTION");
     $params = ['Hph_phord' => $ordencompra->ext_id, 'Tipo' => 'UPOR', 'Estado' => $ordencompra->recibido_totalmente ? 3 : 2, 'Cantidad' => $ordencompra->cantidad_recibida];
     $result = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true);
     if (!$result) {
         return 'Error al consumir servicio de actualización de estado BPCS. Imposible continuar';
     }
     if ($result['Mensaje'] != '') {
         return $result['Mensaje'];
     }
     foreach ($requisicionesRecibidas as $id_requisicion => $lineas_requisicion) {
         // Notificar a los usuarios
         $requisicion = Requisicion::find($id_requisicion);
         $usuario = User::find($requisicion->id_solicitante);
         $jefe = $usuario->boss;
         $users_email = [];
         $users_email[] = ['email' => $usuario->user_email];
         if ($jefe) {
             $users_email[] = ['email' => $jefe->user_email];
         }
         $users_email[] = ['email' => '*****@*****.**'];
         foreach ($users_email as $user) {
             MailController::sendGeneralMail([$user], 'Líneas de requisición ' . $requisicion->id . ' recibidas', view('Adquisiciones.Emails.lineas_requisicion_recibidas', compact('requisicion', 'usuario', 'lineas_requisicion')));
         }
     }
     // Generar PDF y adjuntar a requisiciones asociadas. Guardar el path del archivo en el campo description
     // de las recepciones para asociarlo
     $pdf = $this->generarPDFRecepcion($ordencompra);
     // Adjuntar a requisiciones
     foreach ($requisicionesRecibidas as $id_requisicion => $lineas) {
         $requisicion = Requisicion::find($id_requisicion);
         (new \AttachmentCore())->addAttachmentToRequest($requisicion['ef_id'], \FlowSettingsCore::get(FLOW_ADQUISICIONES, 'ADQ_FILE_CONTABILIDAD'), $pdf, APP_ENVPATH, $_SESSION['user_id'], "Documento de contabilidad");
     }
     // Si la orden de compra fue recibida completamente cerrar la solicitud / las solicitudes para la requisición
     $ef_requests = [];
     if ($ordencompra->estado == 'T') {
         $ordencompra = OrdenCompra::with('lineas.linea_requisicion.requisicion.ef_request')->find($ordencompra->id);
         foreach ($ordencompra->lineas as $linea_ordencompra) {
             $ef_requests[] = $linea_ordencompra->linea_requisicion->requisicion->ef_request->request_id;
         }
         $ef_requests = array_unique($ef_requests);
         foreach ($ef_requests as $request_id) {
             $requisicion_recibida = true;
             // Verificar si todas las líneas de la requisición asociada están recibidas
             $requisicion = Requisicion::where('ef_id', $request_id)->with('lineas.lineas_ordencompra')->first();
             foreach ($requisicion->lineas as $linea_requisicion) {
                 foreach ($linea_requisicion->lineas_ordencompra as $linea_ordencompra) {
                     if ($linea_ordencompra->cantidad_recibida < $linea_ordencompra->cantidad) {
                         $requisicion_recibida = false;
                     }
                 }
             }
             // Cerrar si la requisición está recibida
             if ($requisicion_recibida) {
                 $result = $handlerRequestCore->closeRequest($request_id, $_SESSION['user_id']);
             }
         }
     }
 }
コード例 #13
0
function crearDocumentoContingencia($arrayCabecera, $xmlContent, $rideContent, $rideExtension)
{
    $numFactura = $arrayCabecera["estab"] . $arrayCabecera["ptoEmi"] . $arrayCabecera["secuencial"];
    // Guardar archivos en directorio de temporales
    $xmlFile = dirname(__FILE__) . "/facturas/contingencia/" . $numFactura . "-" . date("Ymdhis") . ".xml";
    file_put_contents($xmlFile, $xmlContent);
    $pdfFile = "";
    if (!empty($rideExtension) && !empty($rideContent)) {
        $pdfFile = dirname(__FILE__) . "/facturas/contingencia/" . $numFactura . "-" . date("Ymdhis") . "." . $rideExtension;
        file_put_contents($pdfFile, $rideContent);
    }
    // Verificar el usuario creador / al que se asignará
    $creador = Responsable::whereRuc($arrayCabecera['ruc'])->lists('responsable')->implode(',');
    if (empty($creador)) {
        $creador = FlowSettingsCore::get(FLOW_RECEPCIONDOCUMENTOS, "RDE_DEF_ASIGNACION");
    }
    OtroDocumento::create(["clase" => "C", "tipo" => $arrayCabecera["tipo_doc"], "numero" => $numFactura, "proveedor" => $arrayCabecera["razonSocial"], "path_xml" => $xmlFile, "path_pdf" => $pdfFile, "usuario" => $creador, "estado" => 0]);
}
コード例 #14
0
        $productos = Connector::connect(FlowSettings::get(FLOW_ADQUISICIONES, 'ADQ_CONNECTION_PRODUCTOS_HACIENDAS'));
        $productos = $productos->data;
        //*******************************************************************
        // 2. Ingreso y datos calculados
        //*******************************************************************
        foreach ($productos as $producto_bpcs) {
            //***********************************************
            // Ingreso de datos básicos
            //***********************************************
            // Ingreso los artículos a la base del BPM
            $producto = Producto::firstOrNew(['origen' => $clase->origen_productos, 'codigo' => $producto_bpcs['HCPROID']]);
            if (!$producto->id) {
                $producto->save();
            }
            $producto->nombre = $producto_bpcs['HCPRONOC'];
            $producto->unidad = $producto_bpcs['HCPROUNM'];
            $producto->tipo = $producto_bpcs['HCPROBIE'];
            $producto->save();
            // Sincronizo las clases del producto
            $producto->clases()->sync([$clase->id]);
        }
        // Consultar y actualizar stocks desde web service
        $result = Connector::connect(FlowSettings::get(FLOW_ADQUISICIONES, 'ADQ_CONNECTION_STOCKS_HACIENDAS'));
        $result = $result->data;
        $result = json_decode($result['Longvarchar']);
        foreach ($result as $producto) {
            $producto_bpm = Producto::where('codigo', $producto->HaKaCId)->where('origen', $clase->origen_productos)->first();
            $producto_bpm->update(['stock_actual' => $producto->HaKacSto]);
        }
    }
}
コード例 #15
0
 public function generarOrdenCompraPDF($request_id)
 {
     $ordenes_compra = OrdenCompra::whereHas('lineas.linea_requisicion.requisicion', function ($query) use($request_id) {
         return $query->where('ef_id', $request_id);
     })->with(['proveedor', 'lineas.linea_requisicion.requisicion', 'lineas.producto'])->get();
     foreach ($ordenes_compra as $orden_compra) {
         $filename = APP_TMPPATH . 'requisicion.pdf';
         PDFController::generatePDF(view('Adquisiciones.PDF.orden_compra', ['orden_compra' => $orden_compra]), false, $filename);
         (new \AttachmentCore())->addAttachmentToRequest($request_id, \FlowSettingsCore::get(FLOW_ADQUISICIONES, 'ADQ_FILE_ORDENCOMPRA'), $filename, APP_ENVPATH, $_SESSION['user_id'], "Orden de Compra " . $orden_compra->id);
     }
 }
コード例 #16
0
ファイル: Requisicion.php プロジェクト: elcuy/Novopan
 /**
  * Devuelve las requisiciones que cumplan con las siguientes características
  *  - Que su ef_request esté en el proceso de 'Adquisiciones'
  * 	- Que su ef_request esté en el paso de 'Aprobar requisición'
  * 	- Que su estado sea 'A' (Aprobado)
  *  - Que su origen y clase sea igual al origen de la requisición con $id_padre (opcional)
  * @param String $id_padre 
  * @return Requisiciones
  */
 public static function getRequisicionesParaConsolidar($id_padre = '')
 {
     // Filtro de estado
     $query = self::estado('A');
     // Filtro de clase
     $requisicion_padre = Requisicion::find($id_padre);
     if ($requisicion_padre) {
         $query->whereIdClase($requisicion_padre->id_clase);
     }
     // Filtro de status de solicitud EF
     $flow = FLOW_ADQUISICIONES;
     $step = FlowSettings::get($flow, 'ADQ_STEP_SELECCIONPROV');
     $query->whereHas('ef_request.open_tasks', function ($query) use($flow, $step) {
         $query->whereTaskFlow($flow)->whereTaskStep($step);
     });
     // Agregar relaciones
     $query->with(['ef_request.open_tasks', 'proveedor', 'clase'])->with(['lineas' => function ($query) {
         $query->with('producto')->where('estado', '!=', 'I');
     }]);
     return $query->get();
 }
コード例 #17
0
 public function AprobarOrdenCompra()
 {
     $input = Request::createFromGlobals();
     $returnArray = array("status" => true, "message" => "");
     $requestCore = new \RequestCore();
     $arrayRequisiciones = [];
     // Traer ordenes de compra
     $ordenes_compra = OrdenCompra::getOrdenesCompraParaAprobacionOrdenCompra($input->request_id);
     foreach ($ordenes_compra as $orden_compra) {
         // Depende del siguiente paso:
         // - Si es selección de proveedor cambiar el estado de OC a 'C' - Consolidada
         // - Si es generación de OC cambiar el estado a 'O' - orden de compra aprobada. Copiar cantidades de Cotización
         if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) {
             $orden_compra->update(['estado' => 'C']);
         } else {
             // Actualizar cabecera de OC
             $orden_compra->update(['id_aprobador_ordencompra' => $_SESSION['user_id'], 'estado' => 'O']);
             // Actualizar líneas de OC
             foreach ($orden_compra->lineas as $linea) {
                 $linea->update(['estado' => 'O']);
                 // Llenar arreglo con número de requisiciones correspondientes
                 $arrayRequisiciones[] = $linea->linea_requisicion->requisicion->id;
             }
         }
     }
     // Mover ef_requests correspondientes
     $arrayRequisiciones = array_unique($arrayRequisiciones);
     foreach ($arrayRequisiciones as $id_requisicion) {
         $requisicion = Requisicion::find($id_requisicion);
         $task = $requisicion->ef_request->open_tasks[0];
         // Completar tareas diferentes a la actual
         // (No se completa la actual porque EF lo hace por default)
         if ($task->task_id != $input->task_id) {
             // TODO: Este valor cambia de acuerdo al siguiente paso
             if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) {
                 $description = 'Orden de Compra no aprobada';
             } else {
                 $description = 'Orden de Compra aprobada por el usuario ' . $_SESSION['user_id'];
             }
             $requestCore->completeTask($task->task_request, $task->task_id, $input->flow_id, $input->step_id, $input->user_id, $description, 'next');
         }
     }
     return $returnArray;
 }
コード例 #18
0
function getHtmlDistribucion($cabeceraRecord)
{
    $handlerTaskCore = new TaskCore();
    $handlerUserCore = new UserCore();
    $flowSettingsHandler = new FlowSettingsCore();
    $handlerDocumentoCabeceraCore = new DocumentoCabeceraCore();
    $handlerDocumentoLineaCore = new DocumentoLineaCore();
    $handlerDistribucionCabeceraCore = new DistribucionCabeceraCore();
    $handlerDistribucionLineaCore = new DistribucionLineaCore();
    $handlerRequestMetadataCore = new RequestMetadataCore();
    $cabeceraData = $handlerDocumentoCabeceraCore->getRecordById($cabeceraRecord["id"]);
    $lineasData = $handlerDocumentoLineaCore->getRecordsByFieldFilter(array(array("field" => "id_documento", "type" => "i", "value" => $cabeceraRecord["id"])));
    $numero_req = $handlerRequestMetadataCore->getVariable($cabeceraRecord["ef_id"], "RDE-NUMERO-REQ");
    $numero_oc = $handlerRequestMetadataCore->getVariable($cabeceraRecord["ef_id"], "RDE-NUMERO-OC");
    $reclamo_seguro = $handlerRequestMetadataCore->getVariable($cabeceraRecord["ef_id"], "RDE-RECLAMO-SEGURO");
    $comentarios = $handlerRequestMetadataCore->getVariable($cabeceraRecord["ef_id"], "RDE-COMENTARIO");
    $dataPasosAprobador1 = $handlerTaskCore->getTaskDataByRequestFlowStep($cabeceraRecord["ef_id"], $_SESSION["user_flow"], $flowSettingsHandler->getSettingValue($_SESSION["user_flow"], "RDE_STEP_APROBACION_1"));
    $dataPasosAprobador2 = $handlerTaskCore->getTaskDataByRequestFlowStep($cabeceraRecord["ef_id"], $_SESSION["user_flow"], $flowSettingsHandler->getSettingValue($_SESSION["user_flow"], "RDE_STEP_APROBACION_2"));
    $aprobador1 = "";
    $aprobador2 = "";
    if (count($dataPasosAprobador1) > 0) {
        $dataAprobador1 = $handlerUserCore->getUserData($dataPasosAprobador1[0]["task_assignedto"]);
        $aprobador1 = $dataAprobador1["user_name"];
    }
    if (count($dataPasosAprobador2) > 0) {
        $dataAprobador2 = $handlerUserCore->getUserData($dataPasosAprobador2[0]["task_assignedto"]);
        $aprobador2 = $dataAprobador2["user_name"];
    }
    $lineasHtml = "";
    foreach ($lineasData as $linea) {
        $distribucionLineaHtml = '';
        if ($cabeceraRecord["tipo_distribucion"] == "detallada") {
            $lineasDistribucionData = $handlerDistribucionLineaCore->getRecordsByFieldFilter(array(array("field" => "id_documento_linea", "type" => "i", "value" => $linea["id"])));
            foreach ($lineasDistribucionData as $lineaDist) {
                $distribucionLineaHtml .= $lineaDist["cc_id"] . '  : ' . $lineaDist["porcentaje"] . '% ($ ' . number_format($lineaDist["valor_distribuido"], 2, '.', '') . ')<br />';
            }
        }
        $lineasHtml .= '<tr>';
        $lineasHtml .= '<td>' . $linea["descripcion"] . '</td>';
        $lineasHtml .= '<td>' . number_format($linea["cantidad"], 2, '.', '') . '</td>';
        $lineasHtml .= '<td>$ ' . number_format($linea["precioUnitario"], 2, '.', '') . '</td>';
        $lineasHtml .= '<td>' . $distribucionLineaHtml . '</td>';
        $lineasHtml .= '<td>$ ' . number_format($linea["precioTotalSinImpuesto"], 2, '.', '') . '</td>';
        $lineasHtml .= '</tr>';
    }
    $lineasHtml .= '<tr>
                            <td colspan="4" class="subtitle" style="text-align: right; background-color: #eee;">Subtotal IVA 12%</td>
                            <td>$ ' . number_format($cabeceraData["subtotalIva12"], 2, '.', '') . '</td>
                        </tr>';
    $lineasHtml .= '<tr>
                            <td colspan="4" class="subtitle" style="text-align: right; background-color: #eee;">IVA 12%</td>
                            <td>$ ' . number_format($cabeceraData["subtotalIva12"], 2, '.', '') . '</td>
                        </tr>';
    $lineasHtml .= '<tr>
                            <td colspan="4" class="subtitle" style="text-align: right; background-color: #eee;">Subtotal IVA 0%</td>
                            <td>$ ' . number_format($cabeceraData["subtotalIva0"], 2, '.', '') . '</td>
                        </tr>';
    $lineasHtml .= '<tr>
                            <td colspan="4" class="subtitle" style="text-align: right; background-color: #eee;">Subtotal Sin IVA</td>
                            <td>$ ' . number_format($cabeceraData["subtotalSinIva"], 2, '.', '') . '</td>
                        </tr>';
    $lineasHtml .= '<tr>
                            <td colspan="4" class="subtitle" style="text-align: right; background-color: #eee;">Importe Total</td>
                            <td>$ ' . number_format($cabeceraData["importeTotal"], 2, '.', '') . '</td>
                        </tr>';
    $distribucionGlobalHtml = '';
    if ($cabeceraData["distribucion"] == "global") {
        $cabeceraDistribucionData = $handlerDistribucionCabeceraCore->getRecordsByFieldFilter(array(array("field" => "id_documento", "type" => "i", "value" => $cabeceraData["id"])));
        if (count($cabeceraDistribucionData) > 0) {
            $distribucionGlobalHtml .= '<h3>Distribución global</h3> 
                                            <table style="width: 100%;">
                                                <tr style="background-color: #ddd;">
                                                    <td class="strong centered subtitle" style="width: 70%; font-weight: bold;">Centro de costo</td>
                                                    <td class="strong centered subtitle" style="width: 15%; font-weight: bold;">Porcentaje</td>
                                                    <td class="strong centered subtitle" style="width: 15%; font-weight: bold;">Valor distribuido</td>
                                                </tr>';
            foreach ($cabeceraDistribucionData as $cabecera) {
                $distribucionGlobalHtml .= '<tr>';
                $distribucionGlobalHtml .= '<td style="width: 70%;">' . $cabecera["cc_id"] . ' - ' . $cabecera["cc_nombre"] . '</td>';
                $distribucionGlobalHtml .= '<td style="width: 15%;">' . $cabecera["porcentaje"] . '</td>';
                $distribucionGlobalHtml .= '<td style="width: 15%;">$ ' . number_format($cabecera["valor_distribuido"], 2, '.', '') . '</td>';
                $distribucionGlobalHtml .= '</tr>';
            }
            $distribucionGlobalHtml .= ' </table>';
        }
    }
    $html = '	<table style="width: 100%;">
						<tr>
	                        <td><strong>Tipo: </strong></td>
	                        <td>Factura</td>
	                        <td><strong>Número: </strong></td>
	                        <td>' . $cabeceraRecord["factura"] . '</td>
	                        <td><strong>Fecha: </strong></td>
	                        <td>' . $cabeceraRecord["fecha"] . '</td>
	                    </tr>
	                    <tr>
	                        <td><strong>Proveedor: </strong></td>
	                        <td>' . $cabeceraRecord["proveedor"] . '</td>
	                        <td><strong>N° requisición: </strong></td>
	                        <td>' . $numero_req . '</td>
	                        <td><strong>N° orden de compra: </strong></td>
	                        <td>' . $numero_oc . '</td>
	                    </tr>

	                    <tr>
	                        <td><strong>Comentarios: </strong></td>
	                        <td colspan="5">' . $comentarios . '</td>
	                    </tr>

	                    <tr>
	                        <td colspan="6" class="unbordered">&nbsp;</td>
	                    </tr>
	                    <tr>
	                        <td colspan="6">
	                            
	                            <h3>Detalles de documento</h3>

	                            <table style="width: 100%;">
	                                <tr style="background-color: #ddd;">
	                                    <td><strong>Descripción</strong></td>
	                                    <td style="width: 10%;"><strong>Cantidad</strong></td>
	                                    <td style="width: 10%;"><strong>V. Uni</strong>.</td>
	                                    <td><strong>Distribución</strong></td>
	                                    <td style="width: 10%;"><strong>Total</strong></td>
	                                </tr>
	                                ' . $lineasHtml . '
	                            </table>

	                            <br /> 

	                            ' . $distribucionGlobalHtml . '

	                            <br /> 

	                        </td>
	                    </tr>
	                    <tr>
	                        <td colspan="6" class="unbordered">&nbsp;</td>
	                    </tr>
	                </table>

					';
    return $html;
}
コード例 #19
0
 public function generarPDF()
 {
     $input = Request::createFromGlobals();
     $task = Task::find($input->task_id);
     if ($task->task_step == \FlowSettingsCore::get(FLOW_RECEPCIONDOCUMENTOS, 'RDE_FILE_OUTPUT_STEP')) {
         $documento = Documento::with(['lineas.lineas_distribucion', 'lineas_distribucion'])->whereEfId($input->request_id)->first();
         $filename = APP_TMPPATH . 'distribucion.pdf';
         PDFController::generatePDF(view('RecepcionDocumentos.PDF.distribucion_costo', ['documento' => $documento]), false, $filename);
         (new \AttachmentCore())->addAttachmentToRequest($input->request_id, \FlowSettingsCore::get(FLOW_RECEPCIONDOCUMENTOS, 'RDE_FILE_OUTPUT'), $filename, APP_ENVPATH, $_SESSION['user_id'], 'Formulario de distribución');
     }
     return array("status" => true, "message" => "");
 }