public function generarExcelInternoCajas($condiciones) { set_time_limit(0); ini_set('memory_limit', '-1'); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $ProveedorDAO = new ProveedorDAO(); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); $ProveedorDAO->setEntityManager($this->getEntityManager()); //----------------Se configura las Etiquetas de Seleccion----------------- $texto_grupo_dispo_cab_id = 'TODOS'; $texto_color_ventas_id = 'TODOS'; $texto_calidad_variedad_id = 'TODOS'; $inventario_id = $condiciones['inventario_id']; if (!empty($condiciones['grupo_dispo_cab_id'])) { $texto_grupo_dispo_cab_id = $condiciones['grupo_dispo_cab_id']; } //end if if (!empty($condiciones['color_ventas_id'])) { $texto_color_ventas_id = $condiciones['color_ventas_id']; } //end if if (!empty($condiciones['calidad_variedad_id'])) { $texto_calidad_variedad_id = $condiciones['calidad_variedad_id']; } //end if //----------------Se inicia la configuracion del PHPExcel----------------- $PHPExcelApp = new PHPExcelApp(); $objPHPExcel = new \PHPExcel(); // Set document properties $PHPExcelApp->setUserName(''); $PHPExcelApp->setMetaDataDocument($objPHPExcel); $objPHPExcel->setActiveSheetIndex(0); //Configura el tamaño del Papel $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); //Se establece la escala de la pagina $objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1); $objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0); //Se establece los margenes de la pagina $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1); //Consulta la lista de registros $condiciones['opcion_dispo'] = 'BUNCH_TODOS'; $result_dispo = $this->listadoDisponibilidadPorProveedor($condiciones, true); //Convertir Dispo en Cajas $result_HB = $this->transformarDispoEnCajas($inventario_id, 'HB', $result_dispo); $result_QB = $this->transformarDispoEnCajas($inventario_id, 'QB', $result_dispo); //Consulta las fincas $result_fincas = $ProveedorDAO->consultarTodos(); $estilo_titulo = $PHPExcelApp::STYLE_ARRAY_TITULO01; $estilo_columna = $PHPExcelApp::STYLE_ARRAY_COLUMNA01; $indice_hoja = -1; $arr_tipo_caja[] = array('tipo_caja_id' => 'HB'); $arr_tipo_caja[] = array('tipo_caja_id' => 'QB'); foreach ($result_fincas as $reg_finca) { foreach ($arr_tipo_caja as $reg_tipo_caja) { switch ($reg_tipo_caja['tipo_caja_id']) { case 'HB': $result_procesar = $result_HB; break; case 'QB': $result_procesar = $result_QB; break; } //end switch /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ $indice_hoja++; if ($indice_hoja > 0) { $objPHPExcel->createSheet($indice_hoja); $estilo_titulo = $PHPExcelApp::STYLE_ARRAY_TITULO02; $estilo_columna = $PHPExcelApp::STYLE_ARRAY_COLUMNA02; } //end if $objPHPExcel->setActiveSheetIndex($indice_hoja); //------------------------------Registra la cabecera-------------------------------- $row = 1; $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(11); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, "Disponibilidad Por Grupo"); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //------------------------------Registra criterios linea 1-------------------------- $row++; $col_ini = $PHPExcelApp->getNameFromNumber(0); //$col_fin = $PHPExcelApp->getNameFromNumber(11); $objRichText = new \PHPExcel_RichText(); $objRichText->createText(''); $objInventario = $objRichText->createTextRun(' Grupo: '); $objInventario->getFont()->setBold(true); $objInventario->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_grupo_dispo_cab_id); $objInventario = $objRichText->createTextRun(' Color: '); $objInventario->getFont()->setBold(true); $objInventario->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_color_ventas_id); $objInventario = $objRichText->createTextRun(' Calidad: '); $objInventario->getFont()->setBold(true); $objInventario->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_calidad_variedad_id); $objPHPExcel->getActiveSheet()->getCell($col_ini . $row)->setValue($objRichText); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); //------------------------------ Registro de Fecha de Generacion -------------------------------- $row++; $col_ini = $PHPExcelApp->getNameFromNumber(0); //$col_fin = $PHPExcelApp->getNameFromNumber(11); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, "Generado: " . \Application\Classes\Fecha::getFechaHoraActualServidor()); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //---------------------------IMPRIME TITULO DE COLUMNA----------------------------- $row++; $row_detalle_ini = $row; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, "Nro"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, "Id"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, "Variedad"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, "Color"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, "40"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, "50"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(6, $row, "60"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(7, $row, "70"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(8, $row, "80"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(9, $row, "90"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(10, $row, "100"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(11, $row, "110"); //----------------------AUTO DIMENSIONAR CELDAS DE ACUERDO AL CONTENIDO--------------- $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(0)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(1)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(2)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(3)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(4)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(5)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(6)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(7)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(8)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(9)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(10)->setWidth(6); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(11)->setWidth(6); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($estilo_titulo)); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_WHITE); // $objPHPExcel->getActiveSheet()->getStyle($col_ini.$row.':'.$col_fin.$row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); //----------------------CONSULTA LOS REGISTROS A EXPORTAR--------------- //$result = $this->listado($condiciones); $cont_linea = 0; $row_detalle_info_ini = $row + 1; foreach ($result_procesar as $reg) { if (!empty($reg['variedad_id'])) { $reg['variedad_id'] = trim($reg['variedad_id']); } //end if if (!empty($reg['color_ventas_nombre'])) { $reg['color_ventas_nombre'] = trim($reg['color_ventas_nombre']); } //end if $cont_linea++; $row = $row + 1; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, $cont_linea); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, $reg['variedad_id']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, $reg['variedad']); if ($reg['tallos_x_bunch'] == 25) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, $reg['variedad']); } else { $objRichText = new \PHPExcel_RichText(); $objRichText->createText($reg['variedad']); $objInventario = $objRichText->createTextRun(' (' . $reg['tallos_x_bunch'] . ')'); $objInventario->getFont()->setBold(true); $objInventario->getFont()->setItalic(true); $col_variedad = $PHPExcelApp->getNameFromNumber(2); $objInventario->getFont()->setColor(new \PHPExcel_Style_Color(\Application\Classes\PHPExcelApp::COLOR_ORANGE)); $objPHPExcel->getActiveSheet()->getCell($col_variedad . $row)->setValue($objRichText); //$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, $reg['variedad'] ); } //end if $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, $reg['color_ventas_nombre']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, $reg['40']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, $reg['50']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(6, $row, $reg['60']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(7, $row, $reg['70']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(8, $row, $reg['80']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(9, $row, $reg['90']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(10, $row, $reg['100']['cajas']['fincas'][$reg_finca['id']]['total']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(11, $row, $reg['100']['cajas']['fincas'][$reg_finca['id']]['total']); } // end foreach //Formato de Numeros $col_ini = $PHPExcelApp->getNameFromNumber(4); $col_fin = $PHPExcelApp->getNameFromNumber(11); $row_detalle_info_ini = $row_detalle_ini + 1; $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row_detalle_info_ini . ':' . $col_fin . $row)->getNumberFormat()->setFormatCode("#,###"); //Margenes $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(11); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row_detalle_info_ini . ":" . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_BORDE_TODO)); // Rename worksheet $objPHPExcel->getActiveSheet()->setTitle($reg_finca['id'] . ' - ' . $reg_tipo_caja['tipo_caja_id']); /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------*/ } //end foreach } //end foreach($result_fincas as $reg_finca) $PHPExcelApp->save($objPHPExcel, $PHPExcelApp::FORMAT_EXCEL_2007, "Dispo Grupo.xlsx"); }
/** * * @param string $inventario_id * @param string $producto * @param string $clasifica_fox * @param string $proveedor_id * @param string $variedad_id * @param string $grado_id * @param array $stock * @throws Exception * @return array */ public function actualizarStock($inventario_id, $producto, $clasifica_fox, $proveedor_id, $variedad_id, $grado_id, $tallos_x_bunch, $stock, $usuario_id = null) { $this->getEntityManager()->getConnection()->beginTransaction(); try { $DispoDAO = new DispoDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $CalidadDAO = new CalidadDAO(); $GrupoDispoDetData = new GrupoDispoDetData(); $DispoDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $CalidadDAO->setEntityManager($this->getEntityManager()); if (empty($proveedor_id)) { //TODAS LAS FINCAS foreach ($stock as $clave => $valor) { $valor = empty($valor) ? 0 : $valor; $DispoDAO->actualizarStock($inventario_id, $producto, $clasifica_fox, $clave, $variedad_id, $grado_id, $tallos_x_bunch, $valor); } //end foreach } else { //UNA SOLA FINCA $stock = $stock[$proveedor_id]; $DispoDAO->actualizarStock($inventario_id, $producto, $clasifica_fox, $proveedor_id, $variedad_id, $grado_id, $tallos_x_bunch, $stock); } //end if //ACTUALIZA EL STOCK DE LOS GRUPOS $tot_stock = $DispoDAO->consultartotalInventario($inventario_id, $producto, $clasifica_fox, $variedad_id, $grado_id, $tallos_x_bunch); $CalidadData = $CalidadDAO->consultarPorClasificaFox($clasifica_fox); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($inventario_id, $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($producto); $GrupoDispoDetData->setVariedadId($variedad_id); $GrupoDispoDetData->setGradoId($grado_id); $GrupoDispoDetData->setTallosXBunch($tallos_x_bunch); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId($usuario_id); $GrupoDispoDetData->setUsuarioIngId($usuario_id); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach $result['validacion_code'] = 'OK'; $result['respuesta_mensaje'] = ''; $this->getEntityManager()->getConnection()->commit(); return $result; } catch (Exception $e) { $this->getEntityManager()->getConnection()->rollback(); $this->getEntityManager()->close(); throw $e; } }
/** * Confirma el pedido y rebaja el inventario correspondiente de las fincas * con sus respectivas validaciones * * @param int $pedido_cab_id * @param int $usuario_id * @throws PedidoException * @throws Exception * @return array> */ public function confirmar($pedido_cab_id, $usuario_cliente_id, $usuario_vendedor_id) { $PedidoDetDAO = new PedidoDetDAO(); $PedidoCabDAO = new PedidoCabDAO(); $PedidoProveedorDAO = new PedidoProveedorDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $DispoDAO = new DispoDAO(); $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $DispoBO = new DispoBO(); $UsuarioDAO = new UsuarioDAO(); $ParametrizarDAO = new ParametrizarDAO(); $PedidoProveedorData = new PedidoProveedorData(); $this->getEntityManager()->getConnection()->beginTransaction(); try { if (empty($usuario_vendedor_id)) { $usuario_procesa_id = $usuario_cliente_id; } else { $usuario_procesa_id = $usuario_vendedor_id; } //end if $PedidoCabDAO->setEntityManager($this->getEntityManager()); $PedidoDetDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); $PedidoProveedorDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $DispoBO->setEntityManager($this->getEntityManager()); $UsuarioDAO->setEntityManager($this->getEntityManager()); $ParametrizarDAO->setEntityManager($this->getEntityManager()); /** * Consulta datos relacionados al usuario */ $row_usuario = $UsuarioDAO->consultar($usuario_cliente_id, \Application\Constants\ResultType::MATRIZ); if (empty($row_usuario)) { throw new PedidoException('Usuario no tiene asignado un grupo!!'); } else { /* $grupo_precio_cab_id= $row_usuario['grupo_precio_cab_id']; //MORONITOR $grupo_dispo_cab_id = $row_usuario['grupo_dispo_cab_id']; $inventario_id = $row_usuario['inventario_id']; */ $clasifica_fox = $row_usuario['clasifica_fox']; $calidad_id = $row_usuario['calidad_id']; } //end if $PedidoCabData = $PedidoCabDAO->consultar($pedido_cab_id); if ($PedidoCabData->getEstado() == \Application\Constants\Pedido::ESTADO_ACTIVO) { throw new PedidoException('El pedido ya fue procesado anteriormente!!'); } //end if /** * Consulta el GRUPO_DISPO_CAB_ID del usuario del cliente */ $GrupoDispoCabData = $GrupoDispoCabDAO->consultarPorUsuarioId($usuario_cliente_id); if (empty($GrupoDispoCabData)) { throw new PedidoException('Usuario no tiene asignado un grupo de dispo!!'); } //end foreach /** * Se obtiene los detalles de los pedidos, siempre y cuando el estado de la CABECERA DEL PEDIDO * este en estado COMPRANDO, por tema de seguridad se pregunta este estado en el QUERY */ $result_pedido = $PedidoDetDAO->consultarPorPedidoCabId($pedido_cab_id, \Application\Constants\Pedido::ESTADO_COMPRANDO); if (empty($result_pedido)) { throw new PedidoException('No existe detalle para el pedido!!'); } //end if /* * 2. Verificar si existe el stock en las fincas, * en caso de estar incompleto el stock devolver lo que este disponible sin grabar */ $arr_novedad_pedido_det = array(); //En caso de tener registro en este array, significa que no existe stock para ese detalle $bd_rollback = false; foreach ($result_pedido as $reg_pedido) { /** * Obtiene la dispo Actual */ $result_dispo_actual = $DispoBO->getDispo($reg_pedido['cliente_id'], $usuario_cliente_id, $reg_pedido['marcacion_sec'], $reg_pedido['tipo_caja_id'], $reg_pedido['variedad_id'], $reg_pedido['grado_id'], true, false, true, $reg_pedido['variedad_producto_id'], $reg_pedido['tallos_x_bunch']); if (empty($result_dispo_actual)) { throw new PedidoException('Dispo Vacia, no es posible confirmar el pedido'); } //end if switch ($result_dispo_actual['respuesta_code']) { case 'OK': $reg_dispo_actual = $result_dispo_actual["result_dispo"][0]; break; case 12: //Sin registro en el inventario del grupo del cliente //Sin registro en el inventario del grupo del cliente case 13: //Sin stock en el grupo del cliente $reg_dispo_actual['nro_cajas'] = 0; //Se emula que la dispo Actual tiene CERO cajas. break; default: $this->getEntityManager()->getConnection()->rollback(); $result = array('respuesta' => $result_dispo_actual['respuesta_code'], 'respuesta_descripcion' => $result_dispo_actual['respuesta_msg'], 'novedades_pedido_det' => null); return $result; } //end switch if ($reg_pedido['nro_cajas'] > $reg_dispo_actual['nro_cajas']) { $bd_rollback = true; $reg_pedido['nro_cajas_en_stock'] = $reg_dispo_actual['nro_cajas']; $arr_novedad_pedido_det[] = $reg_pedido; } else { /* * 2. Grabar el Pedido de las Fincas */ $pedido_nro_cajas = $reg_pedido['nro_cajas']; foreach ($reg_dispo_actual['proveedores_dispo'] as $proveedor_dispo) { if ($pedido_nro_cajas > $proveedor_dispo['nro_cajas']) { $nro_cajas = $proveedor_dispo['nro_cajas']; $pedido_nro_cajas = $pedido_nro_cajas - $nro_cajas; } else { $nro_cajas = $pedido_nro_cajas; $pedido_nro_cajas = 0; } //end if $cantidad_bunchs = $nro_cajas * $reg_dispo_actual['cantidad_bunch']; $tallos_total = $cantidad_bunchs * $reg_dispo_actual['tallos_x_bunch']; $total = $tallos_total * $reg_dispo_actual['precio']; //Se crea la Data para PedidoProveedorData $PedidoProveedorData = new PedidoProveedorData(); $PedidoProveedorData->setPedidoCabId($reg_pedido['pedido_cab_id']); $PedidoProveedorData->setPedidoDetSec($reg_pedido['pedido_det_sec']); $PedidoProveedorData->setProveedorId($proveedor_dispo['proveedor_id']); $PedidoProveedorData->setNroCajas($nro_cajas); $PedidoProveedorData->setCantidadBunch($cantidad_bunchs); $PedidoProveedorData->setTallosxBunch($reg_pedido['tallos_x_bunch']); $PedidoProveedorData->setTallosTotal($tallos_total); $PedidoProveedorData->setVariedadId($reg_pedido['variedad_id']); $PedidoProveedorData->setGradoId($reg_pedido['grado_id']); $PedidoProveedorData->setPrecio($reg_pedido['precio']); $PedidoProveedorData->setTotal($total); //Equivalencias de Caja FB $cajas_fb = \Application\Classes\CajaConversion::equivalenciaFB($reg_pedido['tipo_caja_id'], $nro_cajas); $PedidoProveedorData->setEqFb($cajas_fb); $key_pedidoproveedor = $PedidoProveedorDAO->ingresar($PedidoProveedorData); /* * 3. Rebaja de la DISPO GENERAL */ $result_dispo = $DispoDAO->consultarInventarioPorProveedor($proveedor_dispo['proveedor_id'], $reg_dispo_actual['inventario_id'], $reg_dispo_actual['producto_id'], $reg_dispo_actual['variedad_id'], $reg_dispo_actual['grado_id'], $reg_dispo_actual['tallos_x_bunch'], $clasifica_fox); //$result_dispo = null; if (empty($result_dispo)) { throw new PedidoException('No hay bunches disponibles en la DISPO - FINCA'); } //end if $total_bunch_pedido = $cantidad_bunchs; foreach ($result_dispo as $row_dispo) { if ($row_dispo['cantidad_bunch_disponible'] > $total_bunch_pedido) { $cantidad_descontar = $total_bunch_pedido; $total_bunch_pedido = 0; } else { $cantidad_descontar = $row_dispo['cantidad_bunch_disponible']; $total_bunch_pedido = $total_bunch_pedido - $row_dispo['cantidad_bunch_disponible']; } //end if //REBAJA DE LA DISPO $DispoData = new DispoData(); $DispoData->setFecha($row_dispo['fecha']); $DispoData->setInventarioId($row_dispo['inventario_id']); $DispoData->setFechaBunch($row_dispo['fecha_bunch']); $DispoData->setProveedorId($row_dispo['proveedor_id']); $DispoData->setProducto($row_dispo['producto']); $DispoData->setVariedadId($row_dispo['variedad_id']); $DispoData->setGradoId($row_dispo['grado_id']); $DispoData->setTallosxBunch($row_dispo['tallos_x_bunch']); $DispoData->setClasifica($clasifica_fox); //NUEVO $DispoDAO->rebajar($DispoData, $cantidad_descontar); //REBAJA DE LA DISPO POR GRUPO $DispoGrupoDetData = new GrupoDispoDetData(); $DispoGrupoDetData->setGrupoDispoCabId($GrupoDispoCabData->getId()); $DispoGrupoDetData->setProductoId($row_dispo['producto']); $DispoGrupoDetData->setVariedadId($row_dispo['variedad_id']); $DispoGrupoDetData->setGradoId($row_dispo['grado_id']); $DispoGrupoDetData->setTallosXBunch($row_dispo['tallos_x_bunch']); $GrupoDispoDetDAO->rebajar($DispoGrupoDetData, $cantidad_descontar); if ($total_bunch_pedido == 0) { break; //SALE DEL WHILE } //end if } //end while if ($pedido_nro_cajas == 0) { break; //Sale del ciclo foreach } } //end foreach list($key_pedidocab, $reg_pedidocab) = $PedidoCabDAO->actualizarEstado($pedido_cab_id, \Application\Constants\Pedido::ESTADO_ACTIVO, $usuario_procesa_id); } //end if //CONTROL DE bd_rollback } //end foreach if ($bd_rollback == true) { $this->getEntityManager()->getConnection()->rollback(); $result = array('respuesta' => 'NOVEDAD', 'novedades_pedido_det' => $arr_novedad_pedido_det, 'nro_dias_procesa' => '', 'dia_semana_procesa' => ''); } else { /*-------------Indica los dias que debe que se procesan---*/ $reg_despacho = $ParametrizarDAO->getDiaDespacho($reg_pedidocab['fec_confirmado']); $PedidoCabDAO->actualizarFechaDespacho($pedido_cab_id, $reg_despacho['fecha_procesa']); $this->getEntityManager()->getConnection()->commit(); $this->enviarEmailAdjuntoPDF($pedido_cab_id); /*--------------Devuelve el resultado --------------------*/ $result = array('respuesta' => 'OK', 'novedades_pedido_det' => '', 'nro_dias_procesa' => $reg_despacho['nro_dias_procesa'], 'dia_semana_procesa' => $reg_despacho['dia_semana_procesa']); } //end if return $result; } catch (Exception $e) { $this->getEntityManager()->getConnection()->rollback(); $this->getEntityManager()->close(); throw $e; } //end try }
/** * * @param DispoData $DispoData * @param array $grados * @param int $color_ventas_id * @param int $calidad_variedad_id */ public function moverStock($DispoData, $grados, $color_ventas_id, $calidad_variedad_id, $clasifica_destino) { $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $DispoDAO = new DispoDAO(); $CalidadDAO = new CalidadDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $GrupoDispoDetData = new GrupoDispoDetData(); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $CalidadDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); //Se establece el RANGO DE GRADOS al que se va afectar $flag_1era_vez = true; $sql_grados = ''; foreach ($grados as $reg) { if (!$flag_1era_vez) { $sql_grados = $sql_grados . ","; } //end if $sql_grados = $sql_grados . "'" . $reg['grado_id'] . "'"; $flag_1era_vez = false; } //end foreach //Se consulta el registro de la DISPO ORIGEN $sql = " SELECT dispo.* " . " FROM dispo INNER JOIN variedad " . " ON variedad.id \t\t= dispo.variedad_id "; if (!empty($calidad_variedad_id)) { $sql = $sql . " AND variedad.calidad_variedad_id = " . $calidad_variedad_id; } //end if if (!empty($color_ventas_id)) { $sql = $sql . " LEFT JOIN color_ventas " . " ON color_ventas.id \t= dispo.color_ventas_id "; } //end if $sql = $sql . " WHERE dispo.inventario_id \t= '" . $DispoData->getInventarioId() . "'" . " and dispo.producto \t\t\t= '" . $DispoData->getProducto() . "'" . " and dispo.variedad_id\t\t= '" . $DispoData->getVariedadId() . "'" . " and dispo.grado_id \t\t\tin (" . $sql_grados . ")" . " and dispo.tallos_x_bunch \t= " . $DispoData->getTallosxbunch() . "\tand dispo.clasifica\t\t \t= '" . $DispoData->getClasifica() . "'"; $stmt = $this->getEntityManager()->getConnection()->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(); //Se utiliza el fecth por que es un registro $DispoDataFind = new DispoData(); $DispoDataTarget = new DispoData(); foreach ($result as $reg) { $DispoDataFind->setFecha($reg['fecha']); $DispoDataFind->setInventarioId($reg['inventario_id']); $DispoDataFind->setFechaBunch($reg['fecha_bunch']); $DispoDataFind->setProveedorId($reg['proveedor_id']); $DispoDataFind->setProducto($reg['producto']); $DispoDataFind->setVariedadId($reg['variedad_id']); $DispoDataFind->setGradoId($reg['grado_id']); $DispoDataFind->setTallosxBunch($reg['tallos_x_bunch']); $DispoDataFind->setClasifica($clasifica_destino); $DispoDataSource = $this->consultarPorKey($DispoDataFind); if (empty($DispoDataSource)) { $DispoDataTarget->setFecha($reg['fecha']); $DispoDataTarget->setInventarioId($reg['inventario_id']); $DispoDataTarget->setFechaBunch($reg['fecha_bunch']); $DispoDataTarget->setProveedorId($reg['proveedor_id']); $DispoDataTarget->setProducto($reg['producto']); $DispoDataTarget->setVariedadId($reg['variedad_id']); $DispoDataTarget->setGradoId($reg['grado_id']); $DispoDataTarget->setTallosxBunch($reg['tallos_x_bunch']); $DispoDataTarget->setClasifica($clasifica_destino); $DispoDataTarget->setCantidadBunch($reg['cantidad_bunch']); $DispoDataTarget->setCantidadBunchDisponible($reg['cantidad_bunch_disponible']); $DispoDataTarget->setClasifica($clasifica_destino); $id = $this->ingresar($DispoDataTarget); } else { //Se actualiza la dispo de DESTINO (acumula) $sql = " UPDATE dispo " . " SET cantidad_bunch_disponible = cantidad_bunch_disponible + " . $reg['cantidad_bunch_disponible'] . " WHERE fecha\t\t\t\t= '" . $reg['fecha'] . "'" . "\tand inventario_id \t\t= '" . $reg['inventario_id'] . "'" . " and fecha_bunch\t\t\t= '" . $reg['fecha_bunch'] . "'" . " and proveedor_id\t\t= '" . $reg['proveedor_id'] . "'" . "\tand producto\t\t\t= '" . $reg['producto'] . "'" . " and variedad_id\t\t\t= '" . $reg['variedad_id'] . "'" . "\tand grado_id\t\t\t= " . $reg['grado_id'] . "\tand tallos_x_bunch\t\t= " . $reg['tallos_x_bunch'] . "\tand clasifica\t\t\t= '" . $clasifica_destino . "'"; $count = $this->getEntityManager()->getConnection()->executeUpdate($sql); } //end if //Se resta la dispo de ORIGEN (DISMINUYE) $sql = " UPDATE dispo " . " SET cantidad_bunch_disponible = cantidad_bunch_disponible - " . $reg['cantidad_bunch_disponible'] . " WHERE fecha\t\t\t\t= '" . $reg['fecha'] . "'" . "\tand inventario_id \t\t= '" . $reg['inventario_id'] . "'" . " and fecha_bunch\t\t\t= '" . $reg['fecha_bunch'] . "'" . " and proveedor_id\t\t= '" . $reg['proveedor_id'] . "'" . " and producto\t\t\t= '" . $reg['producto'] . "'" . " and variedad_id\t\t\t= '" . $reg['variedad_id'] . "'" . "\tand grado_id\t\t\t= " . $reg['grado_id'] . "\tand tallos_x_bunch\t\t= " . $reg['tallos_x_bunch'] . "\tand clasifica\t\t\t= '" . $reg['clasifica'] . "'"; $count = $this->getEntityManager()->getConnection()->executeUpdate($sql); //ACTUALIZA EL STOCK DE LOS GRUPOS DESTINO $tot_stock = $DispoDAO->consultartotalInventario($reg['inventario_id'], $reg['producto'], $clasifica_destino, $reg['variedad_id'], $reg['grado_id'], $reg['tallos_x_bunch']); /*if ($tot_stock['tot_cantidad_bunch'] < $tot_stock['tot_bunch_disponible']) { $tot_stock['tot_bunch_disponible'] = $tot_stock['tot_cantidad_bunch']; }//end if */ $CalidadData = $CalidadDAO->consultarPorClasificaFox($clasifica_destino); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($reg['inventario_id'], $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($reg['producto']); $GrupoDispoDetData->setVariedadId($reg['variedad_id']); $GrupoDispoDetData->setGradoId($reg['grado_id']); $GrupoDispoDetData->setTallosXBunch($reg['tallos_x_bunch']); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_cantidad_bunch']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId(1); $GrupoDispoDetData->setUsuarioIngId(1); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach //ACTUALIZA EL STOCK DE LOS GRUPOS ORIGEN $tot_stock = $DispoDAO->consultartotalInventario($reg['inventario_id'], $reg['producto'], $reg['clasifica'], $reg['variedad_id'], $reg['grado_id'], $reg['tallos_x_bunch']); /*if ($tot_stock['tot_cantidad_bunch'] < $tot_stock['tot_bunch_disponible']) { $tot_stock['tot_bunch_disponible'] = $tot_stock['tot_cantidad_bunch']; }//end if */ $CalidadData = $CalidadDAO->consultarPorClasificaFox($reg['clasifica']); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($reg['inventario_id'], $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($reg['producto']); $GrupoDispoDetData->setVariedadId($reg['variedad_id']); $GrupoDispoDetData->setGradoId($reg['grado_id']); $GrupoDispoDetData->setTallosXBunch($reg['tallos_x_bunch']); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_cantidad_bunch']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId(1); $GrupoDispoDetData->setUsuarioIngId(1); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach } //end foreach return true; }