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; }
<?php use EasyFlow\Master\Models\Flow; use EasyFlow\Master\Models\Task; use EasyFlow\Master\Models\User; use EasyFlow\Master\Controllers\LogController; use EasyFlow\Master\Controllers\MailController; require_once dirname(__DIR__) . "/includes/configuration.php"; try { $flows = Flow::all(); foreach ($flows as $flow) { $admin = User::find($flow->flow_administrator); $open_tasks = Task::where('task_flow', $flow->flow_id)->where(function ($query) { $query->open(); })->with(['request', 'step', 'user'])->get(); $html = view('email.daily_admin_summary', compact('flow', 'admin', 'open_tasks')); MailController::sendGeneralMail([["email" => $admin->user_email]], "Resumen de tareas abiertas - " . $flow->flow_name . " - " . date("Y-m-d"), $html); } LogController::logCron('Cron ejecutado con éxito (JobDailyAdminSummary.php)', [], 'INFO'); } catch (Exception $e) { LogController::logCron('Error al ejecutar cron (JobDailyAdminSummary.php)', ['error' => $e->getMessage()], 'ERROR'); }
public static function ingresarRequisicionesYSolicitudes($datos_requisicion) { $handlerRequestCore = new \RequestCore(); $handlerUserCore = new \UserCore(); $handlerFlowCore = new \FlowCore(); $handlerFlowSettingsCore = new \FlowSettingsCore(); // Tomar cada una de las requisiciones del arreglo de entrada foreach ($datos_requisicion as $requisicion) { // Extraer datos de cabecera y líneas $cabecera = $requisicion['cabecera']; $lineas = $requisicion['lineas']; $clase = Clase::find($cabecera['id_clase']); // Validaciones $aprobadores = explode(',', $clase->aprobador_requisicion); if (count($aprobadores) == 0) { return 'No existen aprobadores para la clase "' . $clase->nombre . '". Imposible continuar'; } // Si ya se estableció un solicitante y el valor no está vacío lo busco en EasyFlow // Si este último no existe en EF asignar el primer usuario aprobador como solicitante if (isset($cabecera['id_solicitante']) && !empty($cabecera['id_solicitante'])) { $solicitante = User::with('area')->find($cabecera['id_solicitante']); } if (!$solicitante) { return 'No existe el usuario en el BPM, imposible continuar'; } // Paso personalizado para cada clase $flow = Flow::find(FLOW_ADQUISICIONES); $first_step = $flow->flow_first_step; if ($clase->primer_paso != null || $clase->primer_paso == '' || $clase->primer_paso != 0) { $step = Step::whereStepFlow($flow->flow_id)->whereStepId($clase->primer_paso)->first(); if ($step) { $first_step = $step->step_id; } } // Crear solicitud EF $request_flow = $flow->flow_id; $request_id = $handlerRequestCore->getLastGeneralRequestId() + 1; $inner_request_id = $handlerRequestCore->getLastGeneralRequestId($request_flow) + 1; if ($clase->id == 11) { $request_name = $request_description = 'Requisición - ' . $solicitante->user_name . ' - Hacienda: ' . ucwords(strtolower($cabecera['nombre_cc'])); } else { $request_name = $request_description = 'Requisición - ' . $solicitante->user_name . ' - Departamento: ' . ucwords(strtolower($cabecera['nombre_cc'])); } $request_createdby = $solicitante->user_id; // Si el aprobador de requisición está seteado como 'boss' if ($clase->aprobador_requisicion == 'boss') { // Si el usuario tiene seteado un aprobador if ($solicitante->user_reports_to != '') { // Si este aprobador existe $user_reports_to = User::find($solicitante->user_reports_to); if ($user_reports_to) { $request_assignedto = $user_reports_to->user_id; } else { $request_assignedto = $solicitante->user_id; } } else { $request_assignedto = $solicitante->user_id; } } else { $request_assignedto = $clase->aprobador_requisicion; } $request_start_step = $clase->primer_paso; $handlerRequestCore->createNewRequest($request_id, $inner_request_id, $request_flow, $request_name, $request_description, $request_createdby, $request_assignedto, $request_start_step); // Crear cabecera de requisición $requisicionCabecera = Requisicion::create(array('ef_id' => $request_id, 'ext_id' => isset($cabecera['ext_id']) ? $cabecera['ext_id'] : null, 'id_clase' => $clase->id, 'fecha_inicio' => date('Y-m-d H:i:s'), 'fecha_estimada_fin' => isset($cabecera['fecha_estimada_fin']) ? $cabecera['fecha_estimada_fin'] : null, 'fecha_fin' => null, 'id_solicitante' => $solicitante->user_id, 'nombre_solicitante' => $solicitante->user_name, 'id_cc' => isset($cabecera['id_cc']) ? $cabecera['id_cc'] : $solicitante->area->id, 'nombre_cc' => isset($cabecera['nombre_cc']) ? $cabecera['nombre_cc'] : $solicitante->area->nombre, 'descripcion' => isset($cabecera['descripcion']) ? $cabecera['descripcion'] : null, 'observaciones' => isset($cabecera['observaciones']) ? $cabecera['observaciones'] : null, 'prioridad' => isset($cabecera['prioridad']) ? $cabecera['prioridad'] : null, 'id_proveedor' => isset($cabecera['id_proveedor']) ? $cabecera['id_proveedor'] : null, 'estado' => 'I')); // Crear líneas de requisición foreach ($lineas as $linea) { RequisicionLinea::insert(array('id_requisicion' => $requisicionCabecera->id, 'ext_id' => isset($linea['ext_id']) ? $linea['ext_id'] : null, 'id_producto' => $linea['id_producto'], 'observacion_creador' => isset($linea['observacion_creador']) ? $linea['observacion_creador'] : null, 'cantidad' => $linea['cantidad'], 'estado' => 'I', 'bodega_haciendas' => isset($linea['bodega_haciendas']) ? $linea['bodega_haciendas'] : null, 'papel_cara' => isset($linea['papel_cara']) ? $linea['papel_cara'] : null, 'papel_laminas' => isset($linea['papel_laminas']) ? $linea['papel_laminas'] : null)); } // Asignar variables de solicitud RequestMetadataCore::set($request_id, 'ADQ-CLASE', $clase->id); RequestMetadataCore::set($request_id, 'ADQ-ORIGEN', $clase->origen_requisicion); RequestMetadataCore::set($request_id, 'ADQ-TIPO', $clase->tipo); RequestMetadataCore::set($request_id, 'ADQ-RESPONSABLE-COMPRAS', $clase->responsable_compras); RequestMetadataCore::set($request_id, 'ADQ-RESPONSABLE-BODEGAS', $clase->responsable_bodegas); RequestMetadataCore::set($request_id, 'ADQ-APROBADOR-REQUISICION', $clase->aprobador_requisicion); RequestMetadataCore::set($request_id, 'ADQ-REQ-APROBADA', 'No'); if ($clase->id == '1') { RequestMetadataCore::set($request_id, 'ADQ-APROBADOR-COTIZACION', $clase->aprobador_requisicion); } else { RequestMetadataCore::set($request_id, 'ADQ-APROBADOR-COTIZACION', $solicitante->user_id); } // Ruteo especial: // Papel: No requiere consolidación, sí requiere confirmación // Comerciales: No requiere consolidación, sí requiere confirmación $requiere_confirmacion = 'No'; $requiere_consolidacion = 'Si'; if ($requisicionCabecera->id_clase == 2) { $requiere_confirmacion = 'Si'; $requiere_consolidacion = 'No'; } if ($requisicionCabecera->id_clase == 3 || $requisicionCabecera->id_clase == 4 || $requisicionCabecera->id_clase == 5 || $requisicionCabecera->id_clase == 6) { $requiere_confirmacion = 'Si'; $requiere_consolidacion = 'No'; } RequestMetadataCore::set($request_id, 'ADQ-REQUIERE-CONFIRMACION', $requiere_confirmacion); RequestMetadataCore::set($request_id, 'ADQ-REQUIERE-CONSOLIDACION', $requiere_consolidacion); $requisicion = Requisicion::with('lineas.producto')->find($requisicionCabecera->id); // Establecer usuario responsable // Si son productos comerciales el responsable es el usuario creador if ($requisicion->id_clase == 3 || $requisicion->id_clase == 4 || $requisicion->id_clase == 5 || $requisicion->id_clase == 6) { $handlerRequestCore->updatePic($request_id, $solicitante->user_id); } else { $handlerRequestCore->updatePic($request_id, $clase->responsable_compras); } /* // Emitir aviso a aprobador si el usuario ha solicitado algún producto más de una vez en este mes // (se excluyen haciendas) if($requisicion->id_clase != '1'){ // Obtener los mails de los aprobadores $emails = []; $aprobadores_array = explode(',', $clase->aprobador_requisicion); foreach ($aprobadores_array as $id_aprobador) { if($id_aprobador == 'boss') { // Si el usuario tiene seteado un aprobador if($solicitante->user_reports_to != ''){ // Si este aprobador existe $user_reports_to = User::find($solicitante->user_reports_to); if($user_reports_to) { $id_aprobador = $user_reports_to->user_id; } else { $id_aprobador = $solicitante->user_id; } } else { $id_aprobador = $solicitante->user_id; } } $aprobador = User::find($id_aprobador); $emails[] = ['email'=>$aprobador->user_email]; } foreach ($requisicion->lineas as $linea) { $lineas_producto = RequisicionLinea::whereHas('requisicion',function($query){ $curMonth = strtotime(date('Y-m')); $query->where('fecha_inicio', '>=', date('Y-m', $curMonth)) ->where('fecha_inicio', '<', date('Y-m', strtotime('+ 1 month',$curMonth))); })->where('id_producto', '=', $linea->id_producto)->count(); if($lineas_producto > 1){ $emailContentHtml = 'Estimado aprobador <br /><br /> El usuario '.$solicitante->user_name.' ha creado la requisición '.$requisicion->id.', la cual contiene el producto '.$linea->producto->codigo.' - '.$linea->producto->nombre.'. Este producto ya ha sido solicitado previamente en este mes. Por favor realice la gestión adecuada para no comprar este producto de manera innecesaria.<br /><br /> Atentamente <br /> Novopan del Ecuador S.A.'; MailController::sendGeneralMail($emails, 'Requisición de producto repetido' , $emailContentHtml); } } } */ } }
public function updateReclamo() { $input = Request::createFromGlobals(); $flow = Flow::find(FLOW_RECLAMOS); $reclamo = Reclamo::find($input->id); $reclamo->update(['reclamo_clase' => $input->reclamo_clase, 'reclamo_region' => $input->reclamo_region, 'reclamo_descripcion' => $input->reclamo_descripcion, 'contacto_nombre' => $input->contacto_nombre, 'contacto_telefono' => $input->contacto_telefono, 'contacto_email' => $input->contacto_email, 'visita_requiere' => $input->visita_requiere, 'visita_descripcion' => $input->visita_descripcion, 'visita_responsable' => $input->visita_responsable, 'visita_fecha' => $input->visita_fecha, 'analisis_descripcion' => $input->analisis_descripcion, 'analisis_responsable' => $input->analisis_responsable, 'analisis_fecha' => $input->analisis_fecha, 'decision_decision' => $input->decision_decision, 'decision_monto' => $input->decision_monto, 'decision_descripcion' => $input->decision_descripcion, 'decision_responsable' => $input->decision_responsable, 'decision_fecha' => $input->decision_fecha, 'nc_descripcion' => $input->nc_descripcion, 'nc_responsable' => $input->nc_responsable, 'nc_fecha' => $input->nc_fecha]); // Actualizar cantidad y lote de líneas foreach ($input->lineas as $linea) { ReclamoDetalle::find($linea['id'])->update(['cantidad_reclamo' => $linea['cantidad_reclamo'], 'lote_reclamo' => $linea['lote_reclamo']]); } // Traer usuario responsable $responsable_id = $flow->flow_administrator; $rules = json_decode(\FlowSettingsCore::get(FLOW_RECLAMOS, "REC_PRO_REGLAS_RESPONSABLE")); foreach ($rules as $clase) { if ($clase->clase == $reclamo->reclamo_clase) { foreach ($clase->responsables as $responsable) { if ($responsable->region == $reclamo->reclamo_region) { $responsable_id = $responsable->responsable; break; } } } } // Traer usuario aprobador $aprobador_id = $flow->flow_administrator; $monto = !empty($reclamo->decision_monto) ? $reclamo->decision_monto : 0; $rules = json_decode(\FlowSettingsCore::get(FLOW_RECLAMOS, "REC_PRO_REGLAS_MONTOS")); foreach ($rules as $clase) { if ($clase->clase == $reclamo->reclamo_clase) { foreach ($clase->regiones as $region) { if ($region->region == $reclamo->reclamo_region) { foreach ($region->aprobadores as $aprobador) { if ($monto >= $aprobador->monto) { $aprobador_id = $aprobador->aprobador; } } } } } } \RequestMetadataCore::set($reclamo->ef_id, "REC-USUARIO-SEGUIMIENTO", $responsable_id); \RequestMetadataCore::set($reclamo->ef_id, "REC-USUARIO-APROBACION", $aprobador_id); }