Ejemplo n.º 1
0
 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");
 }
Ejemplo n.º 2
0
 /**
  * 
  * @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;
     }
 }
Ejemplo n.º 3
0
 /**
  * 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
 }
Ejemplo n.º 4
0
 /**
  * 
  * @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;
 }