/**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($id)
 {
     $record = RecepcionEfectiva::find($id)->delete();
     return new AjaxResponse('success', '');
 }
Beispiel #2
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']);
             }
         }
     }
 }