public function getHistoricoPrecioProducto() { $input = Request::createFromGlobals(); $graphArray = []; $graphArray['chart']['type'] = 'spline'; $graphArray['title']['text'] = 'Historial de precios'; $graphArray['xAxis']['type'] = 'datetime'; $graphArray['xAxis']['dateTimeLabelFormats']['month'] = '%e. %b'; $graphArray['xAxis']['dateTimeLabelFormats']['year'] = '%b'; $graphArray['xAxis']['title']['text'] = 'Fecha'; $graphArray['yAxis']['title']['text'] = 'Precio'; $graphArray['yAxis']['min'] = 0; $graphArray['yAxis']['plotLines'] = [['value' => Producto::getPrecioPromedio($input->producto, $input->proveedor), 'dashStyle' => 'shortdash', 'color' => 'red', 'width' => 2, 'label' => ['text' => 'Precio promedio']]]; // Build data for series $serie = []; $graphData = []; $precios = ProductoPrecio::where('id_proveedor', $input->proveedor)->where('id_producto', $input->producto)->orderBy('fecha')->get(); foreach ($precios as $precio) { $graphData[] = [strtotime($precio->fecha) * 1000, $precio->precio]; } $serie = ['name' => 'Precio', 'data' => $graphData]; $graphArray['series'][] = $serie; return $graphArray; }
/** * Devuelve el último precio para un producto * @param type $producto * @param type $proveedor * @return type */ public static function getUltimoPrecio($producto, $proveedor) { $ultimoPrecio = ProductoPrecio::whereIdProducto($producto)->whereIdProveedor($proveedor)->orderBy('fecha', 'desc')->first(); return $ultimoPrecio ? $ultimoPrecio->precio : 0; }
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; }
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { $record = ProductoPrecio::find($id)->delete(); return new AjaxResponse('success', ''); }