public function getOrdenesCompra($ef_id) { $ordenes_compra = OrdenCompra::getOrdenesCompraParaAprobacionOrdenCompra($ef_id); foreach ($ordenes_compra as &$orden_compra) { $orden_compra->cotizaciones = Cotizacion::with(['ordencompra', 'contacto.proveedor', 'lineas.linea_ordencompra.producto', 'lineas.linea_ordencompra.linea_requisicion'])->whereIdOrdencompra($orden_compra->id)->get(); // Traer precio promedio / ultimo precio foreach ($orden_compra->cotizaciones as &$cotizacion) { foreach ($cotizacion->lineas as &$linea) { $linea->precio_promedio = Producto::getPrecioPromedio($linea->linea_ordencompra->producto->id, $cotizacion->contacto->proveedor->id); $linea->ultimo_precio = Producto::getUltimoPrecio($linea->linea_ordencompra->producto->id, $cotizacion->contacto->proveedor->id); } } } return $ordenes_compra; }
public function procesarArchivo() { $cotizacion = []; $input = Request::createFromGlobals(); $objPHPExcel = \PHPExcel_IOFactory::createReader('Excel2007')->load($input->archivo); $token = $objPHPExcel->setActiveSheetIndex(0)->getCell('B2')->getValue(); $tokenArray = $this->parseToken($token); if ($tokenArray['status'] == true) { $cotizacion = Cotizacion::with(['lineas.linea_ordencompra.producto', 'lineas.linea_ordencompra.linea_requisicion.requisicion', 'contacto.proveedor'])->find($tokenArray['token_array'][0]); $id_origen = $cotizacion->ordencompra->id_origen; // Tomar valores de cabecera $cotizacion->forma_pago = $objPHPExcel->setActiveSheetIndex(0)->getCell('B12')->getValue(); $cotizacion->plazo_pago = $objPHPExcel->setActiveSheetIndex(0)->getCell('B13')->getValue(); $cotizacion->tiempo_entrega = $objPHPExcel->setActiveSheetIndex(0)->getCell('B14')->getValue(); $cotizacion->moneda = $objPHPExcel->setActiveSheetIndex(0)->getCell('B15')->getValue(); switch ($id_origen) { case '4': // Comerciales $cotizacion->com_terminos_entrega = $objPHPExcel->setActiveSheetIndex(0)->getCell('B16')->getValue(); $cotizacion->com_forma_embarque = $objPHPExcel->setActiveSheetIndex(0)->getCell('B17')->getValue(); break; } // Tomar valores de líneas $recordRow = 7; while ($objPHPExcel->setActiveSheetIndex(0)->getCell('D' . $recordRow)->getValue() != '') { foreach ($cotizacion->lineas as &$linea) { if ($linea->id == $objPHPExcel->setActiveSheetIndex(0)->getCell('D' . $recordRow)->getValue()) { $linea->observacion = $objPHPExcel->setActiveSheetIndex(0)->getCell('G' . $recordRow)->getValue(); $linea->codigo_alternativo = $objPHPExcel->setActiveSheetIndex(0)->getCell('H' . $recordRow)->getValue(); $linea->cantidad = $objPHPExcel->setActiveSheetIndex(0)->getCell('I' . $recordRow)->getValue(); $linea->valor = $objPHPExcel->setActiveSheetIndex(0)->getCell('J' . $recordRow)->getValue(); $linea->porcentaje_descuento = $objPHPExcel->setActiveSheetIndex(0)->getCell('K' . $recordRow)->getValue(); switch ($id_origen) { case '4': // Comerciales $linea->com_peso = $objPHPExcel->setActiveSheetIndex(0)->getCell('L' . $recordRow)->getValue(); $linea->com_partida = $objPHPExcel->setActiveSheetIndex(0)->getCell('M' . $recordRow)->getValue(); break; } } } $recordRow++; } } return ['status' => $tokenArray['status'], 'message' => $tokenArray['message'], 'cotizacion' => $cotizacion]; }
public function reenviarCotizacion() { $input = Request::createFromGlobals(); $cotizacion = Cotizacion::with('contacto.proveedor', 'lineas.linea_ordencompra.ordencompra')->find($input->id); $orden_compra = $cotizacion->lineas[0]->linea_ordencompra->ordencompra->id; $token = bin2hex($cotizacion->id . '.' . $cotizacion->contacto->id . '.' . $orden_compra . '.' . date('Y-m-d')); $cotizacion->update(['fecha_envio' => date('Y-m-d H:i:s'), 'estado' => 'E', 'token' => $token]); $this->enviarMailCotizacion($cotizacion); }
public function getCotizaciones($ef_id) { $ordenes_compra = OrdenCompra::getOrdenesCompraParaAprobacionCotizacion($ef_id); foreach ($ordenes_compra as &$orden_compra) { $orden_compra->cotizaciones = Cotizacion::with(['ordencompra', 'contacto.proveedor', 'lineas.linea_ordencompra.producto', 'lineas.linea_ordencompra.linea_requisicion.requisicion.ef_request'])->whereIdOrdencompra($orden_compra->id)->get(); // Traer precio promedio / ultimo precio foreach ($orden_compra->cotizaciones as &$cotizacion) { foreach ($cotizacion->lineas as &$linea) { $linea->precio_promedio = Producto::getPrecioPromedio($linea->linea_ordencompra->producto->id, $cotizacion->contacto->proveedor->id); $linea->ultimo_precio = Producto::getUltimoPrecio($linea->linea_ordencompra->producto->id, $cotizacion->contacto->proveedor->id); } } if (!($aprobada = RequestMetadataCore::get($orden_compra->lineas[0]->linea_requisicion->requisicion->ef_request->request_id, 'ADQ-COT-APROBADA'))) { RequestMetadataCore::set($orden_compra->lineas[0]->linea_requisicion->requisicion->ef_request->request_id, 'ADQ-COT-APROBADA', 'Si'); } $orden_compra->aprobada = $aprobada; } return $ordenes_compra; }
public function generarOrdenCompra() { $input = Request::createFromGlobals(); $returnArray = array("status" => true, "message" => ""); $requestCore = new \RequestCore(); $arrayRequisiciones = []; $ordenes_compra = $this->getOrdenesCompra($input->request_id); $handlerWebServiceCore = new WebServiceCore(); foreach ($ordenes_compra as $orden_compra) { $clase = Clase::find($orden_compra->id_clase); if ($orden_compra->ext_id == '') { $wsdl = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_CREAOCHACIENDAS_WSDL"); $operation = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_CREAOCHACIENDAS_OPERATION"); $namespace = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_CREAOCHACIENDAS_NAMESPACE"); $soapAction = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_CREAOCHACIENDAS_SOAPACTION"); $params = ['Tipo' => 'OCRE', 'Hph_phwhse' => $orden_compra->bodega, 'Hph_phvend' => $orden_compra->proveedor->codigo, 'Hph_phbamt' => $orden_compra->valor_total, 'Hpo_pprod' => $clase->bien_economico, 'Hpo_pqord' => $orden_compra->cantidad_total, 'Hpo_pecst' => $orden_compra->valor_total, 'Hpo_podesc' => 'Orden de compra BPM - ' . $orden_compra->id]; $result = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true); if (!$result) { $returnArray['status'] = false; $returnArray['message'] = 'No se pudo consumir el servicio web para creación de orden de compra'; return; } if ($result['Longvarchar'] != '') { $returnArray['status'] = false; $returnArray['message'] = 'Error BPCS: ' . $result['Longvarchar']; return; } $numero_oc = $result['Hph_phord']; // Cambiar estado de orden de compra $orden_compra->update(['estado' => 'G', 'fecha_creacion_erp' => date('Y-m-d H:i:s'), 'id_creador' => $_SESSION['user_id'], 'ext_id' => $numero_oc]); // Agregar recepción planificada del total de OC RecepcionPlanificada::create(['id_ordencompra' => $orden_compra->id, 'fecha' => date('Y-m-d', strtotime('+' . $orden_compra->tiempo_entrega . ' day')), 'observacion' => 'Entrega total estimada de la orden de compra']); // Llenar arreglo con número de requisiciones correspondientes foreach ($orden_compra->lineas as $linea) { $arrayRequisiciones[] = $linea->linea_requisicion->requisicion->id; } // Guardar registros de precio en la base de datos foreach ($orden_compra->lineas as $linea) { ProductoPrecio::create(['id_producto' => $linea->id_producto, 'id_proveedor' => $orden_compra->id_proveedor, 'fecha' => date('Y-m-d H:i:s'), 'precio' => $linea->valor, 'tiempo' => $orden_compra->tiempo_entrega]); } // Notificar a responsable(s) de bodega $responsableArray = explode(',', $orden_compra->clase->responsable_bodegas); // Notificar a usuarios creadores de requisición foreach ($orden_compra->lineas as $linea) { $responsableArray[] = $linea->linea_requisicion->requisicion->id_solicitante; } $responsableArray = array_unique($responsableArray); foreach ($responsableArray as $responsable) { $usuario = User::find($responsable); if ($usuario) { MailController::sendGeneralMail([['email' => $usuario->user_email]], 'Nueva Orden de Compra generada - ' . $orden_compra->clase->nombre, view('Adquisiciones.Emails.orden_compra_interna', compact('usuario', 'orden_compra'))); } } // Notificar a proveedor // Consultar la cotización seleccionada para la OC $cotizacion_seleccionada = Cotizacion::with(['lineas.linea_ordencompra.producto', 'contacto.proveedor'])->whereEstado('S')->whereIdOrdencompra($orden_compra->id)->first(); MailController::sendGeneralMail([['email' => $cotizacion_seleccionada->contacto->email]], 'Nueva orden de compra', view('Adquisiciones.Emails.orden_compra_proveedor', compact('orden_compra', 'cotizacion_seleccionada'))); } } // 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]; $this->generarOrdenCompraPDF($task->task_request); // 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, 'Orden de compra generada en el ERP', 'next'); } // Generar PDF de orden de compra y adjuntar a solicitud $this->generarOrdenCompraPDF($task->task_request); } return $returnArray; }