/**
  * Permite crear un Pedido o agregar detalles a un Pedido ya Existente
  * 
  * @param int|null $pedido_cab_id
  * @param string $cliente_id
  * @param int $usuario_cliente_id
  * @param int $usuario_vendedor_id
  * @param int $marcacion_sec
  * @param string $agencia_carga_id
  * @param string $producto_id
  * @param string $variedad_id
  * @param string $grado_id
  * @param string $tallos_x_bunch
  * @param string $tipo_caja_id
  * @param int $nro_cajas_seleccionada
  * @return array
  */
 public function addItem($pedido_cab_id, $cliente_id, $usuario_cliente_id, $usuario_vendedor_id, $marcacion_sec, $agencia_carga_id, $producto_id, $variedad_id, $grado_id, $tallos_x_bunch, $tipo_caja_id, $nro_cajas_seleccionada, $control_transaccion = true, $tipo_oferta = null, $carne_pedido_cab_sec = null)
 {
     $DispoBO = new DispoBO();
     $PedidoCabDAO = new PedidoCabDAO();
     $PedidoDetDAO = new PedidoDetDAO();
     $PedidoCabData = new PedidoCabData();
     $PedidoDetData = new PedidoDetData();
     if ($control_transaccion) {
         $this->getEntityManager()->getConnection()->beginTransaction();
     }
     //end if
     try {
         $DispoBO->setEntityManager($this->getEntityManager());
         $PedidoCabDAO->setEntityManager($this->getEntityManager());
         $PedidoDetDAO->setEntityManager($this->getEntityManager());
         /*
          * 1. Se establece cual es el usuario que va ingresar el pedido o anadir items al detalle
          */
         if (empty($usuario_vendedor_id)) {
             $usuario_ing_id = $usuario_cliente_id;
         } else {
             $usuario_ing_id = $usuario_vendedor_id;
         }
         /*
          * 2. Se obtiene la DISPO ACTUAL
          */
         $result_dispo = $DispoBO->getDispo($cliente_id, $usuario_cliente_id, $marcacion_sec, $tipo_caja_id, $variedad_id, $grado_id, false, true, true, $producto_id, $tallos_x_bunch);
         if ($result_dispo['respuesta_code'] != 'OK') {
             if ($control_transaccion) {
                 $this->getEntityManager()->getConnection()->rollback();
                 $this->getEntityManager()->close();
             }
             //end if
             return $result_dispo;
         }
         //end if
         $reg_dispo = $result_dispo['result_dispo'][0];
         /*
          * 3. Revisar si tiene un pedido activo 
          */
         if (empty($pedido_cab_id)) {
             //Se llena los campos
             //$PedidoCabData->setId				($pedido_cab_id);
             $PedidoCabData->setFecha(\Application\Classes\Fecha::getFechaHoraActualServidor());
             $PedidoCabData->setClienteId($cliente_id);
             $PedidoCabData->setMarcacionSec($marcacion_sec);
             $PedidoCabData->setAgenciaCargaId($agencia_carga_id);
             $PedidoCabData->setTotal(0);
             $PedidoCabData->setComentario('');
             $PedidoCabData->setEstado(\Application\Constants\Pedido::ESTADO_COMPRANDO);
             $PedidoCabData->setUsuarioClienteId($usuario_cliente_id);
             $PedidoCabData->setUsuarioIngId($usuario_ing_id);
             $pedido_cab_id = $PedidoCabDAO->ingresar($PedidoCabData);
         }
         //end if
         /*
          * 4. Se registra el detalle
          */
         $pedido_cab_sec = $PedidoDetDAO->consultarMaximaSecuencia($pedido_cab_id);
         $pedido_cab_sec++;
         $bunch_total = $nro_cajas_seleccionada * $reg_dispo['cantidad_bunch'];
         //Se multiplica por la cantidad de bunch que tiene una caja
         $tallos_total = $bunch_total * $reg_dispo['tallos_x_bunch'];
         if ($tipo_oferta == 'oferta_carne') {
             $precio = $reg_dispo['precio_oferta'];
         } else {
             $precio = $reg_dispo['precio'];
         }
         //end if
         $precio_total = $tallos_total * $precio;
         //Se multiplica el precio del tallo
         //Se define el total x caja
         if (empty($precio)) {
             $total_x_caja = 0;
         } else {
             $total_x_caja = $reg_dispo['tallos_x_bunch'] * $bunch_total / $nro_cajas_seleccionada * $precio;
         }
         //end if
         $PedidoDetData->setPedidoCabId($pedido_cab_id);
         $PedidoDetData->setPedidoDetSec($pedido_cab_sec);
         //			$PedidoDetData->setMarcacionSec			($marcacion_sec);
         $PedidoDetData->setInventarioId($reg_dispo['inventario_id']);
         $PedidoDetData->setVariedadId($variedad_id);
         $PedidoDetData->setGradoId($grado_id);
         $PedidoDetData->setTipoCajaId($tipo_caja_id);
         $PedidoDetData->setTipoCajaOrigenEstado($reg_dispo['tipo_caja_origen_estado']);
         $PedidoDetData->setTipoCajaOrigenId($reg_dispo['tipo_caja_origen_id']);
         $PedidoDetData->setNroCajas($nro_cajas_seleccionada);
         $PedidoDetData->setCantidadBunch($bunch_total);
         $PedidoDetData->setTallosxBunch($reg_dispo['tallos_x_bunch']);
         $PedidoDetData->setTallosTotal($tallos_total);
         $PedidoDetData->setPrecio($precio);
         $PedidoDetData->setTotalXCaja($total_x_caja);
         $PedidoDetData->setTotal($precio_total);
         //			$PedidoDetData->setAgenciaCargaId		($agencia_carga_id);
         //			$PedidoDetData->setComentario			('');
         if ($tipo_oferta == 'oferta_hueso') {
             $PedidoDetData->setPedidoCabOfertaId($pedido_cab_id);
             $PedidoDetData->setPedidoDetOfertaSec($carne_pedido_cab_sec);
         } else {
             $PedidoDetData->setPedidoCabOfertaId(null);
             $PedidoDetData->setPedidoDetOfertaSec(null);
         }
         //end if
         if ($tipo_oferta == 'oferta_carne') {
             $PedidoDetData->setEstadoRegOferta(1);
         } else {
             $PedidoDetData->setEstadoRegOferta(0);
         }
         //end if
         $PedidoDetData->setCalidadId($this->calidad_id);
         $PedidoDetData->setPuntoCorte($this->punto_corte);
         //MORONITOR
         //conversion a caja FB
         $cajas_fb = \Application\Classes\CajaConversion::equivalenciaFB($tipo_caja_id, $nro_cajas_seleccionada);
         $PedidoDetData->setEqFb($cajas_fb);
         $PedidoDetData->setUsuarioIngId($usuario_ing_id);
         $PedidoDetData->setUsuarioModId($usuario_ing_id);
         $key_det = $PedidoDetDAO->ingresar($PedidoDetData);
         /*
          * 5. Actualizar el total de la CABECERA de PEDIDO
          */
         $PedidoCabDAO->actualizarTotal($pedido_cab_id);
         /*
          * 6. Devuelve el resultado del registro del PEDIDO
          */
         $result['respuesta_code'] = 'OK';
         $result['respuesta_msg'] = '';
         $result['pedido_cab_id'] = $pedido_cab_id;
         $result['pedido_cab_sec'] = $pedido_cab_sec;
         $result['variedad_nombre'] = $reg_dispo['variedad_nombre'];
         if ($control_transaccion) {
             $this->getEntityManager()->getConnection()->commit();
         }
         //end if
         return $result;
     } catch (Exception $e) {
         if ($control_transaccion) {
             $this->getEntityManager()->getConnection()->rollback();
             $this->getEntityManager()->close();
         }
         //end if
         throw $e;
     }
 }
 /**
  * Consultar
  * 
  * @param unknown $id
  * @param unknown $type_result
  * @return \Dispo\Data\PedidoCabData|array|NULL
  */
 public function consultar($id, $type_result = \Application\Constants\ResultType::OBJETO)
 {
     $PedidoCabData = new PedidoCabData();
     $sql = ' SELECT pedido_cab.*, agencia_carga.nombre as agencia_carga_nombre, ' . '		 cliente.nombre as cliente_nombre, ' . '		 cliente.direccion as cliente_direccion, ' . '		 cliente.telefono1 as cliente_telefono1, ' . '		 cliente.fax1 as cliente_fax1, ' . '        marcacion.nombre as marcacion_nombre, ' . '        marcacion.direccion as marcacion_direccion, ' . '        marcacion.telefono as marcacion_telefono ' . ' FROM pedido_cab INNER JOIN cliente ' . '                    ON cliente.id = pedido_cab.cliente_id ' . '				  LEFT JOIN agencia_carga ' . '                    ON agencia_carga.id 		= pedido_cab.agencia_carga_id ' . '				  LEFT JOIN marcacion ' . '					 ON marcacion.marcacion_sec	= pedido_cab.marcacion_sec ' . ' WHERE pedido_cab.id = :id ';
     $stmt = $this->getEntityManager()->getConnection()->prepare($sql);
     $stmt->bindValue(':id', $id);
     $stmt->execute();
     $row = $stmt->fetch();
     //Se utiliza el fecth por que es un registro
     if ($row) {
         switch ($type_result) {
             case \Application\Constants\ResultType::OBJETO:
                 $PedidoCabData = new PedidoCabData();
                 $PedidoCabData->setId($row['id']);
                 $PedidoCabData->setFecha($row['fecha']);
                 $PedidoCabData->setClienteId($row['cliente_id']);
                 $PedidoCabData->setMarcacionSec($row['marcacion_sec']);
                 $PedidoCabData->setAgenciaCargaId($row['agencia_carga_id']);
                 $PedidoCabData->setCuartoFrioId($row['cuarto_frio_id']);
                 $PedidoCabData->setTotal($row['total']);
                 $PedidoCabData->setComentario($row['comentario']);
                 $PedidoCabData->setEstado($row['estado']);
                 $PedidoCabData->setFecAprobado($row['fec_aprobado']);
                 $PedidoCabData->setFecAnulado($row['fec_anulado']);
                 $PedidoCabData->setFecIngreso($row['fec_ingreso']);
                 $PedidoCabData->setFecModifica($row['fec_modifica']);
                 $PedidoCabData->setUsuarioClienteId($row['usuario_cliente_id']);
                 $PedidoCabData->setUsuarioAprobadoId($row['usuario_aprobado_id']);
                 $PedidoCabData->setUsuarioAnuladoId($row['usuario_anulado_id']);
                 $PedidoCabData->setUsuarioIngId($row['usuario_ing_id']);
                 $PedidoCabData->setUsuarioModId($row['usuario_mod_id']);
                 $PedidoCabData->setSincronizado($row['sincronizado']);
                 $PedidoCabData->setFecSincronizado($row['fec_sincronizado']);
                 return $PedidoCabData;
                 break;
             case \Application\Constants\ResultType::MATRIZ:
                 return $row;
         }
         //end switch
     } else {
         return null;
     }
     //end if
 }