예제 #1
0
 /**
  * Obtiene la dispo
  * 
  * @param string $cliente_id
  * @param int $usuario_id
  * @param int $marcacion_sec
  * @param string $tipo_caja_id
  * @param string $variedad_id
  * @param int $grado_id
  * @param boolean $get_fincas
  * @param boolean $rebajar_cajas_pedido
  * @param string $producto_id
  * @param int $tallos_x_bunch
  * @return array
  */
 function getDispo($cliente_id, $usuario_id, $marcacion_sec, $tipo_caja_id = null, $variedad_id = null, $grado_id = null, $get_fincas = false, $rebajar_cajas_pedido = true, $validar_variedad_faltante = false, $producto_id = null, $tallos_x_bunch = null)
 {
     $UsuarioDAO = new UsuarioDAO();
     $DispoDAO = new DispoDAO();
     $TipoCajaMatrizDAO = new TipoCajaMatrizDAO();
     $PedidoDetDAO = new PedidoDetDAO();
     $VariedadDAO = new VariedadDAO();
     /*		$this->getEntityManager()->getConnection()->beginTransaction();
     		try 
     		{
     */
     $UsuarioDAO->setEntityManager($this->getEntityManager());
     $DispoDAO->setEntityManager($this->getEntityManager());
     $TipoCajaMatrizDAO->setEntityManager($this->getEntityManager());
     $PedidoDetDAO->setEntityManager($this->getEntityManager());
     $VariedadDAO->setEntityManager($this->getEntityManager());
     /**
      * Consulta el GRUPO_DISPO_CAB_ID del usuario de cliente
      */
     $row_usuario = $UsuarioDAO->consultar($usuario_id, \Application\Constants\ResultType::MATRIZ);
     if (empty($row_usuario)) {
         //'Usuario no tiene asignado un grupo'
         $result = array('respuesta_code' => '01', 'respuesta_msg' => '00 - Availability Unassigned, please contact to your executive');
         return $result;
     } 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
     /**
      * Se obtiene el inventario para el cliente por proveedor y tipo de inventario especifico,
      * por lo que dara los bunches disponibles, y posteriormente si existe una
      * RESTRICCION en GRUPO_DISPO se aplica la regla para la dispo por grupo
      */
     if (empty($inventario_id)) {
         //Usuario no tiene inventario, comuniquese con su asesor
         $result = array('respuesta_code' => '02', 'respuesta_msg' => '01 - Stock unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if (empty($clasifica_fox)) {
         //'Calidad no tiene clasifica_fox, comuniquese con su asesor'
         $result = array('respuesta_code' => '02', 'respuesta_msg' => '02 - Settings unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if (empty($grupo_precio_cab_id)) {
         //'Usuario no tiene asignado GRUPO PRECIO, comuniquese con su asesor'
         $result = array('respuesta_code' => '02', 'respuesta_msg' => '03 - Price unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if (empty($grupo_dispo_cab_id)) {
         //Usuario no tiene asignado GRUPO DISPO, comuniquese con su asesor
         $result = array('respuesta_code' => '02', 'respuesta_msg' => '04 - Stock unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if ($row_usuario['inventario_id'] != $row_usuario['grupo_precio_cab_inventario_id']) {
         //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE INVENTARIO (GRUPO PRECIO)
         $result = array('respuesta_code' => 'NO-CONFIG-INV-PRECIO', 'respuesta_msg' => '05 - Stock unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if ($row_usuario['inventario_id'] != $row_usuario['grupo_dispo_cab_inventario_id']) {
         //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE INVENTARIO (GRUPO DISPO)
         $result = array('respuesta_code' => 'NO-CONFIG-INV-DISPO', 'respuesta_msg' => '06 - Stock unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if ($row_usuario['calidad_id'] != $row_usuario['grupo_precio_cab_calidad_id']) {
         //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE CALIDAD (GRUPO PRECIO)
         $result = array('respuesta_code' => 'NO-CONFIG-CAL-PRECIO', 'respuesta_msg' => '07 - Settings unloaded, please contact to your executive');
         return $result;
     }
     //end if
     if ($row_usuario['calidad_id'] != $row_usuario['grupo_dispo_cab_calidad_id']) {
         //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE CALIDAD (GRUPO DISPO)
         $result = array('respuesta_code' => 'NO-CONFIG-CAL-DISPO', 'respuesta_msg' => '08 - Settings unloaded, please contact to your executive');
         return $result;
     }
     //end if
     $result = $DispoDAO->consultarInventarioPorUsuario($usuario_id, $producto_id, $variedad_id, $grado_id, $clasifica_fox);
     /**
      *Ajusta el stock de los bunch de las fincas para mostrar la dispo de acuerdo al GRUPO_DISPO_DET
      *se debe de hacer un quiebre por producto, variedad, grado, tallos_x_bunch y  finca, para ajustar la dispo segun las restricciones
      */
     $producto_id_ant = null;
     $variedad_id_ant = null;
     $grado_id_ant = null;
     $tallos_x_bunch_ant = null;
     $grupo_dispo_det_cantidad_bunch_disponible = 0;
     //while($row = $result->fetch_array(MYSQLI_ASSOC))
     if (empty($result)) {
         if ($validar_variedad_faltante) {
             $VariedadData = $VariedadDAO->consultar($variedad_id);
             $result = array('respuesta_code' => '12', 'respuesta_msg' => 'Do not exist any box of: ' . $tipo_caja_id . ' ' . $VariedadData->getNombre() . ' ' . $grado_id . ' cm');
             unset($VariedadData);
             return $result;
         }
         //end if
     }
     //end if
     $result_dispo = null;
     foreach ($result as $row) {
         if ($row['variedad_id'] == 'ALB' && $row['grado_id'] == '60') {
             $debug = 1;
         }
         //end if
         //$porcentaje = 100/100;
         if (empty($row['grupo_dispo_det_cantidad_bunch_disponible'])) {
             $tot_bunch_disponibles = 0;
             /*------------------------------------*/
             if (empty($tot_bunch_disponibles)) {
                 if ($validar_variedad_faltante) {
                     //$VariedadData = $VariedadDAO->consultar($variedad_id);
                     $result = array('respuesta_code' => '13', 'respuesta_msg' => 'Do not exist any box of: ' . $tipo_caja_id . ' ' . $row['variedad_nombre'] . ' ' . $grado_id . ' cm');
                     //unset($VariedadData);
                     return $result;
                 }
                 //end if
             }
             //end if
             /*------------------------------------*/
             //$porcentaje = $row['grupo_dispo_det_cantidad_bunch_disponible']/100;
         } else {
             if ($row['grupo_dispo_det_cantidad_bunch_disponible'] > $row['tot_bunch_disponible']) {
                 $tot_bunch_disponibles = $row['tot_bunch_disponible'];
             } else {
                 $tot_bunch_disponibles = $row['grupo_dispo_det_cantidad_bunch_disponible'];
             }
         }
         //end if
         if ($row['precio'] == 0) {
             continue;
             //MORONITOR
         }
         //Si varia la variedad_id y el grado_id se indica la cantidad de bunch disponibles del GRUPO DISPO
         if ($producto_id_ant != $row['producto_id'] || $variedad_id_ant != $row['variedad_id'] || $grado_id_ant != $row['grado_id'] || $tallos_x_bunch_ant != $row['tallos_x_bunch']) {
             if (empty($row['grupo_dispo_det_cantidad_bunch_disponible'])) {
                 $grupo_dispo_det_cantidad_bunch_disponible = 0;
             } else {
                 $grupo_dispo_det_cantidad_bunch_disponible = $row['grupo_dispo_det_cantidad_bunch_disponible'];
             }
             //end if
             $producto_id_ant = $row['producto_id'];
             $variedad_id_ant = $row['variedad_id'];
             $grado_id_ant = $row['grado_id'];
             $tallos_x_bunch_ant = $row['tallos_x_bunch'];
         }
         //end if
         $grupo_dispo_det_cantidad_bunch_disponible_ant = $grupo_dispo_det_cantidad_bunch_disponible;
         //configura la cantidad de bunch de la FINCA en relacion del GRUPO DISPO
         if ($grupo_dispo_det_cantidad_bunch_disponible > $row['tot_bunch_disponible']) {
             $tot_bunch_disponibles = $row['tot_bunch_disponible'];
             $grupo_dispo_det_cantidad_bunch_disponible = $grupo_dispo_det_cantidad_bunch_disponible - $row['tot_bunch_disponible'];
         } else {
             $tot_bunch_disponibles = $grupo_dispo_det_cantidad_bunch_disponible;
             $grupo_dispo_det_cantidad_bunch_disponible = 0;
         }
         //end if
         if (!empty($tot_bunch_disponibles)) {
             $row_dispo = $row;
             $row_dispo['producto_id'] = $row_dispo['producto_id'];
             $row_dispo['variedad_nombre'] = trim($row_dispo['variedad_nombre']);
             $row_dispo['proveedor_id'] = $row_dispo['proveedor_id'];
             $row_dispo['variedad_id'] = $row_dispo['variedad_id'];
             $row_dispo['grado_id'] = $row_dispo['grado_id'];
             //$row_dispo['tallos_x_bunch']		= $row_dispo['tallos_x_bunch'];
             $row_dispo['precio'] = $row_dispo['precio'];
             $row_dispo['precio_oferta'] = $row_dispo['precio_oferta'];
             $row_dispo['grupo_dispo_det_cantidad_bunch_disponible'] = $grupo_dispo_det_cantidad_bunch_disponible_ant;
             //$row_dispo['tot_bunch_disponible'] 	= floor($row_dispo['tot_bunch_disponible']*$porcentaje);
             $row_dispo['tot_bunch_disponible'] = $tot_bunch_disponibles;
             $row_dispo['tallos_x_bunch'] = $row_dispo['tot_tallos_x_bunch'] / $row_dispo['veces_tallos_x_bunch'];
             $row_dispo['color_nombre'] = $row_dispo['color_nombre'];
             $row_dispo['url_ficha'] = $row_dispo['url_ficha'];
             //Los siguientes se llenaran más adelante
             $row_dispo['tipo_caja_origen_estado'] = NULL;
             $row_dispo['tipo_caja_origen_id'] = NULL;
             $row_dispo['tipo_caja_unds_bunch'] = NULL;
             $row_dispo['nro_cajas'] = NULL;
             $result_dispo[] = $row_dispo;
         }
         //end if
     }
     //end foreach
     if (empty($result_dispo)) {
         $result = array('respuesta_code' => '08', 'respuesta_msg' => 'Dispo unavailable');
         return $result;
         //NO HAY DISPO
     }
     foreach ($result_dispo as &$row_dispo) {
         $row = $TipoCajaMatrizDAO->consultaPorInventarioPorMarcacionPorVariedadPorGrado($inventario_id, $marcacion_sec, $row_dispo['variedad_id'], $row_dispo['grado_id'], $tipo_caja_id);
         if (!empty($row)) {
             //echo("<pre>");var_dump($row);echo("</pre>"); //DEBUG
             $row_dispo['tipo_caja_id'] = $row['tipo_caja_id'];
             $row_dispo['tipo_caja_origen_estado'] = $row['tipo_caja_origen_estado'];
             $row_dispo['tipo_caja_origen_id'] = $row['tipo_caja_origen_id'];
             $row_dispo['tipo_caja_unds_bunch'] = $row['tipo_caja_unds_bunch'];
             $row_dispo['tallos_x_bunch'] = $row_dispo['tallos_x_bunch'];
             //MEJORA POR LOS BUNCHS
             if (empty($row['tipo_caja_unds_bunch'])) {
                 $row_dispo['nro_cajas'] = 0;
             } else {
                 $row_dispo['nro_cajas'] = floor($row_dispo['tot_bunch_disponible'] / $row['tipo_caja_unds_bunch']);
             }
             //end if
             //obtiene la dispo por proveedores
             if ($get_fincas == true) {
                 $row_dispo_temp = null;
                 $row_dispo_temp['proveedor_id'] = $row_dispo['proveedor_id'];
                 $row_dispo_temp['tot_bunch_disponible'] = $row_dispo['tot_bunch_disponible'];
                 $row_dispo_temp['nro_cajas'] = $row_dispo['nro_cajas'];
                 $proveedores_dispo[] = $row_dispo_temp;
             }
             //end if
         } else {
             $result = array('respuesta_code' => '03', 'respuesta_msg' => $row_dispo['variedad_nombre'] . ' ' . $row_dispo['grado_id'] . ' cm variety have not ' . $tipo_caja_id . ' box available');
             //throw new Exception('Error, no tiene caja disponible');
             return $result;
         }
         //end if
     }
     //end foreach
     /**
      * Consolida las cajas de los proveedores (a nivel FINCAS)
      */
     $result_consolidado = NULL;
     $bd_1era_vez = true;
     $producto_id_ant = NULL;
     $variedad_id_ant = NULL;
     $grado_id_ant = NULL;
     $tallos_x_bunch_ant = NULL;
     //echo("<pre>");var_dump($result_dispo);echo("</pre>"); exit
     foreach ($result_dispo as $row) {
         if ($bd_1era_vez == true || $producto_id_ant != $row['producto_id'] || $variedad_id_ant != $row['variedad_id'] || $grado_id_ant != $row['grado_id'] || $tallos_x_bunch_ant != $row['tallos_x_bunch']) {
             if ($bd_1era_vez == false) {
                 if (!empty($row_new['nro_cajas'])) {
                     $key = $producto_id_ant . '-' . $variedad_id_ant . '-' . trim($grado_id_ant) . '-' . $tallos_x_bunch_ant;
                     $result_consolidado[$key] = $row_new;
                 }
                 //end if
             }
             //end if
             $bd_1era_vez = false;
             //Inicializa los campos totalizadores
             $row_new = NULL;
             $row_new['nro_cajas'] = 0;
             $row_new['tot_bunch_disponible'] = 0;
         }
         //end if
         //Se totaliza el registro
         $row_new['producto_id'] = $row['producto_id'];
         $row_new['inventario_id'] = $inventario_id;
         $row_new['grado_id'] = $row['grado_id'];
         $row_new['variedad_id'] = $row['variedad_id'];
         $row_new['variedad_nombre'] = $row['variedad_nombre'];
         $row_new['tipo_caja_id'] = $row['tipo_caja_id'];
         $row_new['tipo_caja_origen_estado'] = $row['tipo_caja_origen_estado'];
         $row_new['tipo_caja_origen_id'] = $row['tipo_caja_origen_id'];
         $row_new['cantidad_bunch'] = $row['tipo_caja_unds_bunch'];
         $row_new['tipo_caja_default_id'] = $tipo_caja_id;
         $row_new['nro_cajas'] = $row_new['nro_cajas'] + $row['nro_cajas'];
         $row_new['tot_bunch_disponible'] = $row_new['tot_bunch_disponible'] + $row['tot_bunch_disponible'];
         $row_new['tallos_x_bunch'] = $row['tallos_x_bunch'];
         $row_new['color_nombre'] = $row['color_nombre'];
         $row_new['url_ficha'] = $row['url_ficha'];
         $row_new['precio'] = $row['precio'];
         $row_new['precio_oferta'] = $row['precio_oferta'];
         //Control para el quiebre
         $producto_id_ant = $row['producto_id'];
         $variedad_id_ant = $row['variedad_id'];
         $grado_id_ant = $row['grado_id'];
         $tallos_x_bunch_ant = $row['tallos_x_bunch'];
     }
     //end foreach
     if ($bd_1era_vez == false) {
         if (!empty($row_new['nro_cajas'])) {
             $key = $producto_id_ant . '-' . $variedad_id_ant . '-' . trim($grado_id_ant) . '-' . $tallos_x_bunch_ant;
             $result_consolidado[$key] = $row_new;
         }
         //end if
     }
     //end if
     /**
      * Consulta todos los pedido del cliente en estado comprando
      * para poder homologar las cajas para poderlas restar del stock
      */
     $result = $PedidoDetDAO->consultarPedidosEstadoComprando($cliente_id, $inventario_id, $producto_id, $variedad_id, $grado_id, $tallos_x_bunch, $calidad_id);
     //Ajusta el porcentaje de acuerdo a la restriccion de GRUPO_DISPO
     //var_dump($result_consolidado);
     $nro_cajas = 0;
     foreach ($result as $row) {
         $key = $row['producto_id'] . '-' . $row['variedad_id'] . '-' . trim($row['grado_id']) . '-' . $row['tallos_x_bunch'];
         $row_consolidado =& $result_consolidado[$key];
         if ($rebajar_cajas_pedido == true) {
             $nro_cajas_homologada = $PedidoDetDAO->getCajasHomologadaPedido($inventario_id, $cliente_id, $marcacion_sec, $row['variedad_id'], $row['grado_id'], "C", $row_consolidado['tipo_caja_id'], $row['tallos_x_bunch'], $calidad_id);
         } else {
             $nro_cajas_homologada = 0;
         }
         $row_consolidado['nro_cajas'] = $row_consolidado['nro_cajas'] - $nro_cajas_homologada;
         if ($row_consolidado['nro_cajas'] < 0) {
             $row_consolidado['nro_cajas'] = 0;
         }
         //end if
     }
     //end foreach
     /**
      * Se quita el key del array, para que no afecte al pasarlo por JSON
      */
     $result_consolidado2 = null;
     if (!empty($result_consolidado)) {
         foreach ($result_consolidado as $reg) {
             if ($reg['nro_cajas'] > 0) {
                 $result_cajas = $TipoCajaMatrizDAO->consultarTipoCajaPorInventarioPorVariedadPorGrado($inventario_id, $reg['variedad_id'], $reg['grado_id']);
                 $cajas = null;
                 foreach ($result_cajas as $row_caja) {
                     $cajas[] = $row_caja['tipo_caja_id'];
                 }
                 //end while
                 $reg['cajas'] = $cajas;
                 //obtiene la dispo por proveedores
                 if ($get_fincas == true) {
                     $reg['proveedores_dispo'] = $proveedores_dispo;
                 }
                 //end if
                 $result_consolidado2[] = $reg;
             }
             //end if
         }
         //end foreach
     }
     //end if
     //$this->getEntityManager()->getConnection()->commit();
     $result = array('respuesta_code' => 'OK', 'respuesta_msg' => '', 'result_dispo' => $result_consolidado2);
     //return $result_consolidado2;
     /*			echo('<pre>');
     			var_dump($result);
     			echo('</pre>');
     			die();
     */
     return $result;
     /*		} catch (Exception $e) {
     			$this->getEntityManager()->getConnection()->rollback();
     			$this->getEntityManager()->close();
     			throw $e;
     		}		
     */
 }
예제 #2
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
 }
예제 #3
0
 public function generarExcel($condiciones)
 {
     set_time_limit(0);
     ini_set('memory_limit', '-1');
     $UsuarioDAO = new UsuarioDAO();
     $UsuarioDAO->setEntityManager($this->getEntityManager());
     //----------------Se configura las Etiquetas de Seleccion-----------------
     $texto_criterio_busqueda = '';
     $texto_estado = 'TODOS';
     $texto_perfil = 'TODOS';
     if (!empty($condiciones['criterio_busqueda'])) {
         $texto_criterio_busqueda = $condiciones['criterio_busqueda'];
     }
     //end if
     switch ($condiciones['estado']) {
         case 'A':
             $texto_estado = 'ACTIVO';
             break;
         case 'I':
             $texto_estado = 'INACTIVO';
             break;
     }
     //end switch
     switch ($condiciones['perfil_id']) {
         case '2':
             $texto_perfil = 'VENDEDOR';
             break;
         case '3':
             $texto_perfil = 'ADMINISTRADOR';
             break;
     }
     //end switch
     //----------------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);
     //------------------------------Registra la cabecera--------------------------------
     $row = 1;
     $col_ini = $PHPExcelApp->getNameFromNumber(0);
     $col_fin = $PHPExcelApp->getNameFromNumber(5);
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, "Lista de Usuarios");
     $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 = 2;
     $col_ini = $PHPExcelApp->getNameFromNumber(0);
     $col_fin = $PHPExcelApp->getNameFromNumber(5);
     $objRichText = new \PHPExcel_RichText();
     $objRichText->createText('');
     $objCriterio = $objRichText->createTextRun('Criterio: ');
     $objCriterio->getFont()->setBold(true);
     $objCriterio->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN));
     $objRichText->createText($texto_criterio_busqueda);
     $objEstado = $objRichText->createTextRun('    Estado: ');
     $objEstado->getFont()->setBold(true);
     $objEstado->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN));
     $objRichText->createText($texto_estado);
     $objPerfil = $objRichText->createTextRun('     Perfil: ');
     $objPerfil->getFont()->setBold(true);
     $objPerfil->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN));
     $objRichText->createText($texto_perfil);
     $objPHPExcel->getActiveSheet()->getCell($col_ini . $row)->setValue($objRichText);
     $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row);
     //------------------------------ Registro de Fecha de Generacion --------------------------------
     $row = 3;
     $col_ini = $PHPExcelApp->getNameFromNumber(0);
     $col_fin = $PHPExcelApp->getNameFromNumber(5);
     //$etiqueta = "";
     $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 + 1;
     $row_detalle_ini = $row;
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, "Nro");
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, "Nombre");
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, "Usuario");
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, "Login Fox");
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, "Correo");
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, "Perfil");
     //----------------------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)->setAutoSize(true);
     $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(5)->setAutoSize(true);
     $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA));
     $objPHPExcel_getActiveSheet = $objPHPExcel->getActiveSheet();
     //----------------------CONSULTA LOS REGISTROS A EXPORTAR---------------
     $result = $this->listado($condiciones);
     $cont_linea = 0;
     foreach ($result as $reg) {
         $reg['nombre'] = trim($reg['nombre']);
         $reg['username'] = trim($reg['username']);
         $reg['login_fox'] = trim($reg['login_fox']);
         $reg['email'] = trim($reg['email']);
         $cont_linea++;
         $row = $row + 1;
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, $cont_linea);
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, $reg['nombre']);
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, $reg['username']);
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, $reg['login_fox']);
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, $reg['email']);
         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, $reg['perfil_nombre']);
     }
     // end foreach
     //Margenes
     $col_ini = $PHPExcelApp->getNameFromNumber(0);
     $col_fin = $PHPExcelApp->getNameFromNumber(5);
     $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row_detalle_ini . ":" . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_BORDE_TODO));
     // Rename worksheet
     $objPHPExcel->getActiveSheet()->setTitle('Listado Usuarios');
     $PHPExcelApp->save($objPHPExcel, $PHPExcelApp::FORMAT_EXCEL_2007, "ListadoUsuarios.xlsx");
 }