/**
  * Modificar
  *
  * @param ParametrizarData $ParametrizarData
  * @return array
  */
 function modificar(ParametrizarData $ParametrizarData)
 {
     $this->getEntityManager()->getConnection()->beginTransaction();
     try {
         $ParametrizarDAO = new ParametrizarDAO();
         $ParametrizarDAO->setEntityManager($this->getEntityManager());
         $ParametrizarData2 = $ParametrizarDAO->consultar($ParametrizarData->getId());
         //$result = $ParametrizarDAO->consultarDuplicado('M',$ParametrizarData->getId());
         $id = $ParametrizarData->getId();
         //$Descripcion=	$ParametrizarData->getDescripcion();
         if (!empty($result)) {
             $result['validacion_code'] = 'NO-EXISTS';
             $result['respuesta_mensaje'] = 'El registro  existe, no puede ser moficado!!';
         } else {
             $id = $ParametrizarDAO->modificar($ParametrizarData);
             $result['validacion_code'] = 'OK';
             $result['respuesta_mensaje'] = '';
         }
         //end if
         $this->getEntityManager()->getConnection()->commit();
         return $result;
     } catch (Exception $e) {
         $this->getEntityManager()->getConnection()->rollback();
         $this->getEntityManager()->close();
         throw $e;
     }
 }
 /**
  *
  * @param array $condiciones  (grupo_dispo_cab_id, color_ventas_id, calidad_variedad_id, cadena_color_ventas_ids, cadena_calidad_variedad_ids)
  * @return array
  */
 public function listadoDisponibilidadPorProveedor($condiciones, $omitir_registros_vacios = false)
 {
     $GrupoDispoCabDAO = new GrupoDispoCabDAO();
     $DispoDAO = new DispoDAO();
     $CalidadDAO = new CalidadDAO();
     $ParametrizarDAO = new ParametrizarDAO();
     $GrupoDispoCabDAO->setEntityManager($this->getEntityManager());
     $DispoDAO->setEntityManager($this->getEntityManager());
     $CalidadDAO->setEntityManager($this->getEntityManager());
     $ParametrizarDAO->setEntityManager($this->getEntityManager());
     $condiciones["dispo_rotacion_dias_inicio"] = $ParametrizarDAO->getValorParametro('dispo_rotacion_ini');
     /*-------En caso que no exita la condicion['arr_fechas_cajas'] se le pone un valor nulo por defecto------*/
     if (!array_key_exists('arr_fechas_cajas', $condiciones)) {
         $condiciones["arr_fechas_cajas"] = null;
     }
     //end if
     /*-------------------------------------------------------------------------------------------------------*/
     $arr_grados = array('40', '50', '60', '70', '80', '90', '100', '110');
     /**
      * Se obtiene el registro CABECERA de la DISPO X GRUPO
      */
     $reg_grupoDispoCab = $GrupoDispoCabDAO->consultarArray($condiciones['grupo_dispo_cab_id']);
     if (empty($reg_grupoDispoCab)) {
         return null;
     }
     //end if
     $CalidadData = $CalidadDAO->consultar($reg_grupoDispoCab['calidad_id']);
     $clasifica_fox = $CalidadData->getClasificaFox();
     if (!array_key_exists('cadena_color_ventas_ids', $condiciones)) {
         $condiciones['cadena_color_ventas_ids'] = '';
     }
     if (!array_key_exists('cadena_calidad_variedad_ids', $condiciones)) {
         $condiciones['cadena_calidad_variedad_ids'] = '';
     }
     /**
      * Se obtiene los registro de la DISPO GENERAL  (UNIVERSO)
      */
     /*		$condiciones2 = array(
     				"inventario_id"					=> $reg_grupoDispoCab['inventario_id'],
     				"proveedor_id"					=> null,
     				"clasifica"						=> $reg_grupoDispoCab['clasifica_fox'],
     				"color_ventas_id"				=> $condiciones['color_ventas_id'],
     				"calidad_variedad_id" 			=> $condiciones['calidad_variedad_id'],
     				"cadena_color_ventas_ids"		=> $condiciones['cadena_color_ventas_ids'],
     				"cadena_calidad_variedad_ids"	=> $condiciones['cadena_calidad_variedad_ids'],
     				"group_by_proveedor_id"			=> true
     		);
     		$result_dispo_temp = $DispoDAO->listado($condiciones2);
     		$result_dispo = $DispoDAO->TransformarResultIndexadoProveedor($result_dispo_temp);
     	*/
     /**
      * Se obtiene los registros de la DISPO POR GRUPO
      */
     $condiciones2 = array("grupo_dispo_cab_id" => $condiciones['grupo_dispo_cab_id'], "color_ventas_id" => $condiciones['color_ventas_id'], "calidad_variedad_id" => $condiciones['calidad_variedad_id'], "cadena_color_ventas_ids" => $condiciones['cadena_color_ventas_ids'], "cadena_calidad_variedad_ids" => $condiciones['cadena_calidad_variedad_ids']);
     $result_dispo_grupo = $GrupoDispoCabDAO->listado($condiciones2);
     /**
      * Se realizar el proceso de consolidacion de informacion
      */
     $result = null;
     foreach ($result_dispo_grupo as $reg) {
         if ($omitir_registros_vacios == true) {
             if ($reg['40'] == 0 && $reg['50'] == 0 && $reg['60'] == 0 && $reg['70'] == 0 && $reg['80'] == 0 && $reg['90'] == 0 && $reg['100'] == 0 && $reg['110'] == 0) {
                 continue;
             }
             //end if
         }
         //end if
         $reg_new = null;
         $reg_new['producto_id'] = $reg['producto_id'];
         $reg_new['variedad_id'] = $reg['variedad_id'];
         $reg_new['variedad'] = trim($reg['variedad']);
         $reg_new['tallos_x_bunch'] = $reg['tallos_x_bunch'];
         $reg_new['color_ventas_nombre'] = $reg['color_ventas_nombre'];
         $reg_new['40']['bunchs']['total'] = $reg['40'];
         $reg_new['50']['bunchs']['total'] = $reg['50'];
         $reg_new['60']['bunchs']['total'] = $reg['60'];
         $reg_new['70']['bunchs']['total'] = $reg['70'];
         $reg_new['80']['bunchs']['total'] = $reg['80'];
         $reg_new['90']['bunchs']['total'] = $reg['90'];
         $reg_new['100']['bunchs']['total'] = $reg['100'];
         $reg_new['110']['bunchs']['total'] = $reg['110'];
         /*$reg_new['40']['cajas']['total']	= 0;
         		$reg_new['50']['cajas']['total']	= 0;
         		$reg_new['60']['cajas']['total']	= 0;
         		$reg_new['70']['cajas']['total']	= 0;
         		$reg_new['80']['cajas']['total']	= 0;
         		$reg_new['90']['cajas']['total']	= 0;
         		$reg_new['100']['cajas']['total']	= 0;
         		$reg_new['110']['cajas']['total']	= 0;
         		*/
         /*	$DispoDAO->consultarInventarioPorProveedor($proveedor_id, $inventario_id, $producto_id, $variedad_id, $grado_id, $tallos_x_bunch, $clasifica_fox);
         			$DispoDAO->consultarPorInventarioPorCalidadPorProveedorPorGradoPorTallo($inventario_id, $clasifica_fox, $proveedor_id, $variedad_id, $grado_id, $tallos_x_bunch)
         		*/
         /*
          * El resultado se encuentra ordenado del MAYOR STOCK al MENOR STOCK
          */
         $result_dispo = $DispoDAO->consultarPorInventarioPorClasificaPorVariedadPorTallos($reg['producto_id'], $reg_grupoDispoCab['inventario_id'], $clasifica_fox, $reg['variedad_id'], $reg['tallos_x_bunch'], $condiciones['opcion_dispo'], $condiciones['dispo_rotacion_dias_inicio'], $condiciones['arr_fechas_cajas']);
         foreach ($arr_grados as $grado) {
             $stock_grupo = $reg[$grado];
             if (!empty($result_dispo)) {
                 if (array_key_exists($grado, $result_dispo)) {
                     foreach ($result_dispo[$grado] as $key_proveedor => $stock_proveedor) {
                         if ($stock_grupo > $stock_proveedor) {
                             $valor = $stock_proveedor;
                             $reg_new[$grado]['bunchs']['fincas'][$key_proveedor] = $valor;
                             //$reg_new[$grado]['cajas']['fincas'][$key_proveedor]	= 0;
                             $stock_grupo = $stock_grupo - $valor;
                         } else {
                             $valor = $stock_grupo;
                             $reg_new[$grado]['bunchs']['fincas'][$key_proveedor] = $valor;
                             //$reg_new[$grado]['cajas']['fincas'][$key_proveedor]	= 0;
                             $stock_grupo = 0;
                         }
                         //end if
                     }
                     //end foreach
                 } else {
                     $debug = 1;
                     //$valor = $stock_proveedor;
                     //$reg_new[$grado]['bunchs']['fincas'][$key_proveedor]= 0;
                 }
                 //end if
             } else {
                 $debug = 1;
             }
             //end if
         }
         //end foreach
         $result[$reg['producto_id'] . '-' . $reg['variedad_id'] . '-' . $reg['tallos_x_bunch']] = $reg_new;
     }
     //end foreach
     return $result;
 }
示例#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
 }