示例#1
0
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($id)
 {
     $record = Producto::find($id);
     // Validaciones
     if (count(RequisicionLinea::where('id_producto', $record->id)->get())) {
         return new AjaxResponse('error', 'Este producto ya ha sido usado en una requisición. No se puede eliminar');
     }
     $record->clases()->detach();
     $record->delete();
     return new AjaxResponse('success', '');
 }
 public function getDatosProducto()
 {
     $input = Request::createFromGlobals();
     $proveedores = [];
     $lista_proveedores = ProductoPrecio::select('id_proveedor')->with('proveedor')->whereIdProducto($input->id)->groupBy('id_proveedor')->get();
     foreach ($lista_proveedores as $proveedor) {
         $proveedores[] = ['id_proveedor' => $proveedor->id_proveedor, 'codigo_proveedor' => $proveedor->proveedor->codigo, 'nombre_proveedor' => $proveedor->proveedor->nombre, 'id_producto' => $input->id, 'nombre_producto' => $input->nombre, 'ultimo_precio' => Producto::getUltimoPrecio($input->id, $proveedor->id_proveedor), 'precio_promedio' => Producto::getPrecioPromedio($input->id, $proveedor->id_proveedor)];
     }
     $requisiciones = RequisicionLinea::with('requisicion')->whereIdProducto($input->id)->get();
     $ordenes_compra = OrdenCompra::whereHas('lineas', function ($query) use($input) {
         $query->whereIdProducto($input->id);
     })->with(['lineas' => function ($query) use($input) {
         $query->whereIdProducto($input->id);
     }])->with('proveedor')->get();
     return ['proveedores' => $proveedores, 'requisiciones' => $requisiciones, 'ordenes_compra' => $ordenes_compra];
 }
 /**
  * Crea una orden de compra con el ID y líneas, o adjunta líneas a una OC
  * @param String $oc 
  * @param String $lineas 
  * @return void
  */
 public function crearOrdenCompraAjax()
 {
     $input = Request::createFromGlobals();
     $oc = $input->oc;
     $lineas = $input->lineas;
     // Validar que no se combinen líneas de requisición de un proveedor ya asignado con otro proveedor
     // o con líneas de requisición que no tengan proveedor
     $proveedoresArray = [];
     $lineasArray = explode(',', $lineas);
     foreach ($lineasArray as $idLinea) {
         $linea_requisicion = RequisicionLinea::with('requisicion')->find($idLinea);
         if ($linea_requisicion->requisicion->proveedor) {
             $proveedoresArray[] = $linea_requisicion->requisicion->id_proveedor;
         } else {
             $proveedoresArray[] = 0;
         }
     }
     $proveedoresArray = array_unique($proveedoresArray);
     if (count($proveedoresArray) > 1) {
         return array('status' => false, 'message' => 'Algunas de las líneas ya tienen proveedor asignado. No se pueden combinar con líneas no asignadas');
     }
     $requisicion = Requisicion::find($input->id);
     if ($oc == 'nueva_oc') {
         $orden_compra = OrdenCompra::create(array('ext_id' => '', 'id_clase' => $requisicion->id_clase, 'moneda' => 'dolar', 'fecha_inicio' => date('Y-m-d H:i:s'), 'fecha_fin' => '', 'estado' => 'I'));
         if ($proveedoresArray[0] != 0) {
             $orden_compra->id_proveedor = $proveedoresArray[0];
             $orden_compra->save();
         }
         $id = $orden_compra->id;
     } else {
         $id = $oc;
     }
     foreach ($lineasArray as $idLinea) {
         $linea_requisicion = RequisicionLinea::with('requisicion')->find($idLinea);
         OrdenCompraLinea::create(array('id_ordencompra' => $id, 'id_linea_requisicion' => $idLinea, 'id_producto' => $linea_requisicion->id_producto, 'cantidad' => $linea_requisicion->cantidad, 'valor' => 0, 'observacion' => $linea_requisicion->requisicion->observacion_creador, 'estado' => 'I'));
     }
     return $this->getFormDataAjax();
 }
 /**
  * Actualiza los datos de la requisición
  * @return type
  */
 public function actualizarRequisicion()
 {
     $input = Request::createFromGlobals();
     $aprobado = 'No';
     foreach ($input->lineas as $linea) {
         RequisicionLinea::find($linea['id'])->update(['cantidad' => $linea['cantidad'], 'observacion_aprobador' => $linea['observacion_aprobador'], 'estado' => $linea['estado']]);
         if ($linea['estado'] == 'A') {
             $aprobado = 'Si';
         }
     }
     \RequestMetadataCore::set($input->ef_id, "ADQ-REQ-APROBADA", $aprobado);
 }
 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);
                 }
             }
         }
         */
     }
 }
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($id)
 {
     $record = RequisicionLinea::find($id)->delete();
     return new AjaxResponse('success', '');
 }