/**
  * Eliminacion logica del registro en la tabla. Se encargada colocar el flag audit_deleted =true
  * 
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\RedirectResponse
  */
 public function eliminarAction(InventarioDet $inventarioDet)
 {
     $auditUser = $this->container->get('security.context')->getToken()->getUser();
     $inventarioDetDao = new InventarioDetDao($this->getDoctrine());
     $inventarioDao = new InventarioDao($this->getDoctrine());
     //Buscamos el encabezado para quitarle la cantidad a eliminar
     $inventarioOld = $inventarioDao->findInventario($inventarioDet->getInventario()->getEntidad()->getEntId(), $inventarioDet->getAlcId(), $inventarioDet->getInvGrado(), $inventarioDet->getInvNombreEsp());
     //$inventarioOld = $inventarioDet->getInventario();
     $invLitros = $inventarioOld->getInvLitros();
     $invReservado = $inventarioOld->getInvReservado();
     if ($inventarioDet->getInvDetAccion() == '+') {
         $inventarioOld->setInvLitros($invLitros - $inventarioDet->getInvDetLitros());
     } else {
         if ($inventarioDet->getInvDetAccion() == 'R') {
             //$inventarioOld->setInvLitros($invLitros - $inventarioDet->getInvDetLitros());
             $inventarioOld->setInvReservado($invReservado - $inventarioDet->getInvDetLitros());
         } else {
             if ($inventarioDet->getInvDetAccion() == '-') {
                 $inventarioOld->setInvLitros($invLitros + $inventarioDet->getInvDetLitros());
             }
         }
     }
     $inventarioOld->setAuditUserUpd($auditUser->getUsername());
     $inventarioOld->setAuditDateUpd(new \DateTime());
     $inventarioDetDao->delInventarioDet($inventarioDet->getInvDetId(), $auditUser->getUsername());
     $this->get('session')->setFlash('notice', '#### El registro ha sido eliminado ####');
     return $this->redirect($this->generateUrl('MinSalSCAProcesosBundle_mantInventariosDet'));
 }
 /**
  * Proceso encargado de realizar la expiración de solicitudes de 
  * Importacion y Registro Local de Compras
  * 
  */
 public function expiracionSolicitudesAction()
 {
     /*###########################################
       ##* Expiración de Solicitudes Importación ##
       ###########################################*/
     $solImportacionDao = new SolImportacionDao($this->getDoctrine());
     $transicionDao = new TransicionDao($this->getDoctrine());
     $solicitudes = $solImportacionDao->getSolicitudesExpiradas();
     $contSolImp = 0;
     foreach ($solicitudes as $sol) {
         $transiciones = $transicionDao->getTransicionesSiguientes($sol->getTransicion()->getTraId());
         foreach ($transiciones as $tran) {
             $estId = $tran->getEstado()->getEstId();
             if ($estId == Estado::$CANCELADO) {
                 $sol->setTransicion($tran);
                 $sol->setSolImpComentario('Solicitud Expirada');
                 $sol->setAuditUserUpd('SCA');
                 $sol->setAuditDateUpd(new \DateTime());
                 $solImportacionDet = $sol->getSolImportacionesDet();
                 $solImportacionDet = $solImportacionDet[0];
                 $solImportacionDao->editSolImportacion($sol);
                 $this->generarEmailSolImpNotificacion($solImportacionDet, $tran);
                 $contSolImp = $contSolImp + 1;
             }
         }
     }
     /*###############################################
       ##* Expiracion de Registros de compra local  ###
       ################################################*/
     $solLocalDao = new SolLocalDao($this->getDoctrine());
     $inventarioDetDao = new InventarioDetDao($this->getDoctrine());
     $solicitudes = $solLocalDao->getSolicitudesExpiradas();
     $contSolLocal = 0;
     foreach ($solicitudes as $sol) {
         $transiciones = $transicionDao->getTransicionesSiguientes($sol->getTransicion()->getTraId());
         foreach ($transiciones as $tran) {
             $estId = $tran->getEstado()->getEstId();
             if ($estId == Estado::$CANCELADO) {
                 //Buscamos el encabezado para realizar la transicion
                 $solLocalDet = $sol->getSolLocalesDet();
                 $solLocalDet = $solLocalDet[0];
                 $localDetId = $solLocalDet->getLocalDetId();
                 $invsDetTemp = $solLocalDet->getInventariosDet();
                 foreach ($invsDetTemp as $tmp) {
                     if ($solLocalDet->getSolLocal()->getEntidad()->getEntId() != $tmp->getInventario()->getEntidad()->getEntId()) {
                         $inventarioProv = $tmp->getInventario();
                     }
                 }
                 /*NOTA: Solo se busca el registro de inventario que esten en R (reserva) para eliminarse
                  * Los demás se asumen que si ya entraron a inventario no hay reversa 
                  */
                 $inventarioDetTmp = $inventarioDetDao->findInventarioDet($inventarioProv->getInvId(), $localDetId, 'R');
                 $inventarioDetTmp = $this->eliminarInventarioDetProveedorAction($inventarioDetTmp);
                 $sol->setTransicion($tran);
                 $sol->setSolLocalComentario('Solicitud Expirada');
                 $sol->setAuditUserUpd('SCA');
                 $sol->setAuditDateUpd(new \DateTime());
                 $solLocalDao->editSolLocal($sol);
                 $this->generarEmailSolLocalNotificacion($solLocalDet, $tran);
                 $contSolLocal = $contSolLocal + 1;
             }
         }
     }
     return new Response('ok -> SolImportacion Expiradas =' . $contSolImp . '   SolLocal Expiradas = ' . $contSolLocal);
 }
 private function agregarInventarioProveedor(SolLocalDet $solLocalDet, $invId, $litros, $grados, $reserva, $liberarParcial)
 {
     $user = $this->get('security.context')->getToken()->getUser();
     $inventarioDao = new InventarioDao($this->getDoctrine());
     $inventarioDetDao = new InventarioDetDao($this->getDoctrine());
     //$inventarioDetDao = new InventarioDetDao($this->getDoctrine());
     //$alcoholDao = new AlcoholDao($this->getDoctrine());
     $inventarioDet = null;
     $localDetId = $solLocalDet->getLocalDetId();
     //Buscamos si el encabezado en la tabla de "Inventario" existe
     $inventario = $inventarioDao->getInventario($invId);
     if ($inventario != null) {
         $invLitros = $inventario->getInvLitros();
         $invReservado = $inventario->getInvReservado();
         $invGrado = $inventario->getInvGrado();
         if ($reserva) {
             //Esta formula es para convertir los litros en el grado del inventario del proveedor
             $inventario->setInvReservado($invReservado + $litros * $grados / $invGrado);
             $inventarioDet = new InventarioDet();
             $inventarioDet->setInvDetFecha(new \DateTime());
             $inventarioDet->setAuditUserIns($user->getUsername());
             $inventarioDet->setAuditDateIns(new \DateTime());
             $inventarioDet->setInvDetLitros($litros * $grados / $invGrado);
             $inventarioDet->setInvDetAccion("R");
         } else {
             $inventario->setInvLitros($invLitros - $litros * $grados / $invGrado);
             $inventario->setInvReservado($invReservado - $litros * $grados / $invGrado);
             $inventarioDet = $inventarioDetDao->findInventarioDet($invId, $localDetId, 'R');
             $inventarioDet->setAuditUserUpd($user->getUsername());
             $inventarioDet->setAuditDateUpd(new \DateTime());
             if ($liberarParcial) {
                 $inventarioDetParcial = new InventarioDet();
                 $inventarioDetParcial->setInvDetFecha(new \DateTime());
                 $inventarioDetParcial->setAuditUserIns($user->getUsername());
                 $inventarioDetParcial->setAuditDateIns(new \DateTime());
                 $inventarioDetParcial->setInvDetLitros($litros * $grados / $invGrado);
                 $inventarioDetParcial->setInvDetAccion("-");
                 $inventarioDetParcial->setSolLocalDet($solLocalDet);
                 $inventarioDetParcial->setInventario($inventario);
                 $inventarioDetParcial->getInventario()->addInventarioDet($inventarioDetParcial);
                 $inventarioDet->setInvDetLitros($inventarioDet->getInvDetLitros() - $litros * $grados / $invGrado);
             } else {
                 $inventarioDet->setInvDetAccion("-");
             }
         }
         $inventario->setAuditUserUpd($user->getUsername());
         $inventario->setAuditDateUpd(new \DateTime());
         $inventarioDet->setInventario($inventario);
         //## Detalle de inventario
         $inventarioDet->getInventario()->addInventarioDet($inventarioDet);
     } else {
         throw new Exception('No existe inventario de Proveedor');
     }
     return $inventarioDet;
 }