Exemple #1
0
function crearRequisicionHaciendas($estructura)
{
    LogController::logWebServiceIn('Llamada a web service: ' . __FILE__ . ' - ' . __FUNCTION__, compact('estructura'));
    $id_clase = 1;
    // Haciendas
    $requisicion = json_decode($estructura);
    $clase = Clase::find($id_clase);
    $solicitante = User::where('user_additional_data_1', $requisicion->id_solicitante)->first();
    if ($solicitante) {
        $requisicion->id_solicitante = $solicitante->user_id;
        $requisicion->nombre_solicitante = $solicitante->user_name;
    } else {
        return 'No hay un usuario en EasyFlow con ese codigo de empleado Novopan. Imposible continuar';
    }
    // Armar arreglo de cabecera de requisición
    $cabecera = ['ext_id' => $requisicion->id_requisicion, 'id_clase' => $id_clase, 'id_solicitante' => $requisicion->id_solicitante, 'nombre_solicitante' => $requisicion->nombre_solicitante, 'id_cc' => $requisicion->id_hacienda, 'nombre_cc' => $requisicion->nombre_hacienda, 'descripcion' => $requisicion->descripcion, 'prioridad' => $requisicion->prioridad];
    // Armar arreglo de líneas de requisición
    $lineas = [];
    foreach ($requisicion->lineas as $linea) {
        // Ingresar el producto si no existe
        $producto = Producto::firstOrNew(['origen' => $clase->origen_productos, 'codigo' => $linea->id_producto]);
        $producto->origen = $clase->origen_productos;
        $producto->codigo = $linea->id_producto;
        $producto->nombre = $linea->nombre_producto;
        $producto->unidad = $linea->unidad;
        $producto->tipo = $linea->tipo;
        $producto->save();
        // Sincronizar la clase 'haciendas' para el mismo producto
        $producto->clases()->sync([$clase->id]);
        // Armar la línea
        $lineas[] = ['ext_id' => $linea->id_linea, 'id_producto' => $producto->id, 'observacion_creador' => $linea->observacion, 'cantidad' => $linea->cantidad_solicitada, 'bodega_haciendas' => $requisicion->bodega];
    }
    $datos_requisicion = [compact(['cabecera', 'lineas'])];
    return IngresoRequisicionController::ingresarRequisicionesYSolicitudes($datos_requisicion);
}
 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;
 }
Exemple #3
0
 public function storeMaterialOficina()
 {
     $input = Request::createFromGlobals();
     // Validaciones para materiales de oficina
     // Revisar que el código no se repita entre los otros materiales de oficina
     $tmp_record = Producto::where('codigo', $input->codigo)->whereHas('clases', function ($query) use($input) {
         return $query->where('id_clase', 11);
         // Clase para materiales de oficina
     })->first();
     if ($tmp_record) {
         return new AjaxResponse('error', 'Ese código de producto ya existe');
     }
     $record = Producto::create(['origen' => 'oficina', 'codigo' => $input->codigo, 'nombre' => $input->nombre, 'precio_promedio' => 0, 'dias_promedio' => 0, 'meses_inventario' => 0, 'stock_minimo' => 0, 'stock_maximo' => 0, 'stock_actual' => 0, 'stock_transito' => 0, 'consumo_promedio' => 0, 'unidad' => $input->unidad, 'sugerido' => 0]);
     $record->clases()->attach(11);
     // Clase para materiales de oficina
     return new AjaxResponse('success', '', $record);
 }
 public function getProductos()
 {
     $returnData = [];
     $input = Request::createFromGlobals();
     // Get all records
     $records = Producto::with('consumos', 'clases')->whereHas('clases', function ($query) use($input) {
         $query->whereIdClase($input->clase);
     });
     $returnData['total'] = $records->count();
     // Filter results
     if ($input->searchString != '') {
         $records->where(function ($query) use($input) {
             $query->where('nombre', 'LIKE', '%' . $input->searchString . '%')->orWhere('codigo', 'LIKE', '%' . $input->searchString . '%');
         });
     }
     $returnData['filtered'] = $records->count();
     // Get the actual data with limits
     $records->skip($input->displayStart)->take($input->recordsPerPage);
     // Añade el proveedor favorito a resultados
     $returnData['records'] = $records->get();
     return $returnData;
 }
 public function getTableData()
 {
     $input = Request::createFromGlobals();
     $returnData = [];
     // Get all records
     $records = Producto::where('id', '>', 0);
     if ($input->clase != '') {
         $records->whereHas('clases', function ($query) use($input) {
             $query->where('id_clase', $input->clase);
         });
     }
     $returnData['total'] = $records->count();
     // Filter results
     if ($input->searchString != '') {
         $records->where(function ($query) use($input) {
             $query->where('codigo', 'LIKE', '%' . $input->searchString . '%')->orWhere('nombre', 'LIKE', '%' . $input->searchString . '%');
         });
     }
     $returnData['filtered'] = $records->count();
     // Get the actual data with limits
     $records->skip($input->displayStart)->take($input->recordsPerPage)->orderBy('codigo');
     $returnData['records'] = $records->get();
     return $returnData;
 }
 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;
 }
 public function getDatosAdicionalesOC($ordenes_compra)
 {
     foreach ($ordenes_compra as $orden_compra) {
         // Sacar los mejores proveedores por cada línea
         foreach ($orden_compra->lineas as $linea) {
             $linea->mejor_proveedor_precio = $linea->producto->getMejorProveedorPrecio();
             $linea->mejor_proveedor_tiempo = $linea->producto->getMejorProveedorTiempo();
             $linea->ultimo_precio = null;
             $linea->precio_promedio = null;
             if (count($linea->mejor_proveedor_precio) > 0) {
                 $linea->ultimo_precio = Producto::getUltimoPrecio($linea->producto->id, $linea->mejor_proveedor_precio->id);
                 $linea->precio_promedio = Producto::getPrecioPromedio($linea->producto->id, $linea->mejor_proveedor_precio->id);
             }
             $linea->tiempo_entrega = null;
             if (count($linea->mejor_proveedor_tiempo) > 0) {
                 $linea->tiempo_entrega = Producto::getTiempoPromedio($linea->producto->id, $linea->mejor_proveedor_tiempo->id);
             }
         }
         $cotizaciones = Cotizacion::with(['lineas.linea_ordencompra.producto', 'contacto.proveedor'])->where('id_ordencompra', $orden_compra->id)->get();
         // Traer precio promedio / ultimo precio
         /*
         foreach ($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);
             }
         }
         */
         $orden_compra->cotizaciones = $cotizaciones;
     }
     return $ordenes_compra;
 }
 public function getCotizaciones($ef_id)
 {
     $returnArray = [];
     $ordenes_compra = $this->getOrdenesCompra($ef_id);
     foreach ($ordenes_compra as $orden_compra) {
         $cotizaciones = Cotizacion::with(['lineas.linea_ordencompra.producto', 'contacto.proveedor'])->where('id_ordencompra', $orden_compra->id)->get();
         // Traer precio promedio / ultimo precio
         foreach ($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);
             }
         }
         $returnArray[] = ['orden_compra' => $orden_compra->id, 'cotizaciones' => $cotizaciones, 'motivo' => $orden_compra->observacion_seleccionador_cotizacion];
     }
     return $returnArray;
 }
 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;
 }
        $productos = Connector::connect(FlowSettings::get(FLOW_ADQUISICIONES, 'ADQ_CONNECTION_PRODUCTOS_HACIENDAS'));
        $productos = $productos->data;
        //*******************************************************************
        // 2. Ingreso y datos calculados
        //*******************************************************************
        foreach ($productos as $producto_bpcs) {
            //***********************************************
            // Ingreso de datos básicos
            //***********************************************
            // Ingreso los artículos a la base del BPM
            $producto = Producto::firstOrNew(['origen' => $clase->origen_productos, 'codigo' => $producto_bpcs['HCPROID']]);
            if (!$producto->id) {
                $producto->save();
            }
            $producto->nombre = $producto_bpcs['HCPRONOC'];
            $producto->unidad = $producto_bpcs['HCPROUNM'];
            $producto->tipo = $producto_bpcs['HCPROBIE'];
            $producto->save();
            // Sincronizo las clases del producto
            $producto->clases()->sync([$clase->id]);
        }
        // Consultar y actualizar stocks desde web service
        $result = Connector::connect(FlowSettings::get(FLOW_ADQUISICIONES, 'ADQ_CONNECTION_STOCKS_HACIENDAS'));
        $result = $result->data;
        $result = json_decode($result['Longvarchar']);
        foreach ($result as $producto) {
            $producto_bpm = Producto::where('codigo', $producto->HaKaCId)->where('origen', $clase->origen_productos)->first();
            $producto_bpm->update(['stock_actual' => $producto->HaKacSto]);
        }
    }
}