Example #1
0
 /**
  * Expide todas las líneas de expedición correspondientes
  * a la entidad $entidad y línea de entidad $idLineaEntidad
  *
  * @param string $entidad La entidad padre (AlbaranesCab,ManufacCab,TraspasosCab)
  * @param integer $idLineaEntidad El id de la línea de la entidad padre
  * @return float La cantidad de unidades expedidas
  */
 public function expide($entidad, $idLineaEntidad)
 {
     $unidadesExpedidas = 0;
     $rows = $this->cargaCondicion("*", "Entidad='{$entidad}' and IDLineaEntidad='{$idLineaEntidad}' and Expedida='0'");
     foreach ($rows as $row) {
         // Si no se han indicado unidades a expedir,
         // no se actualiza stock ni se genera mvto de almacen.
         if ($row['Unidades'] != 0) {
             $valores = array('UM' => $row['UnidadMedida'], 'Reales' => $row['Unidades'], 'Pales' => $row['Pales'], 'Cajas' => $row['Cajas'], 'Reservadas' => 0, 'Entrando' => 0);
             $mvtoAlmacen = new MvtosAlmacen();
             $ok = $mvtoAlmacen->genera($row['Entidad'], 'S', $row['IDEntidad'], $row['IDAlmacen'], $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores);
             // Valores con los que actualizar
         }
         $unidadesExpedidas += $row['Unidades'];
         if ($ok) {
             // Marcar la linea de expedición como expedida
             $expedicion = new Expediciones($row['IDLinea']);
             $expedicion->setExpedida(1);
             $expedicion->save();
         } else {
             $expedicion = new Expediciones($row['IDLinea']);
             $expedicion->setExpedida(0);
             $expedicion->setUnidades(0);
             $expedicion->save();
             $unidadesExpedidas = 0;
         }
     }
     unset($mvtoAlmacen);
     unset($expedicion);
     return $unidadesExpedidas;
 }
Example #2
0
 /**
  * Recepciona todas las líneas de recepción correspondientes
  * a la entidad $entidad y línea de entidad $idLineaEntidad
  *
  * @param string $entidad La entidad padre (PedidosCab,ManufacCab,TraspasosCab)
  * @param integer $idLineaEntidad El id de la línea de la entidad padre
  * @return float La cantidad de unidades recepcionadas
  */
 public function recepciona($entidad, $idLineaEntidad, $flagDeposito = '0')
 {
     $unidadesRecepcionadas = 0;
     $rows = $this->cargaCondicion("*", "Entidad='{$entidad}' and IDLineaEntidad='{$idLineaEntidad}' and Recepcionada='0'");
     foreach ($rows as $row) {
         $valores = array('UM' => $row['UnidadMedida'], 'Reales' => $row['UnidadesNetas'], 'Pales' => $row['Pales'], 'Cajas' => $row['Cajas'], 'Reservadas' => 0, 'Entrando' => 0);
         $mvtoAlmacen = new MvtosAlmacen();
         $ok = $mvtoAlmacen->genera($row['Entidad'], 'E', $row['IDEntidad'], $row['IDAlmacen'], $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], $flagDeposito, $valores);
         // Valores con los que actualizar
         $unidadesRecepcionadas += $row['UnidadesNetas'];
         if ($ok) {
             // Marcar la linea de recepción como recepcionada.
             $recepcion = new Recepciones($row['IDLinea']);
             $recepcion->setRecepcionada(1);
             $recepcion->save();
         } else {
             // Ha fallado la creación/validación del movimiento. No se
             // marca la recepción como recepcionada
             $recepcion = new Recepciones($row['IDLinea']);
             $recepcion->setRecepcionada(0);
             $recepcion->setUnidadesBrutas(0);
             $recepcion->setUnidadesNetas(0);
             $recepcion->save();
             $unidadesRecepcionadas = 0;
         }
     }
     unset($mvtoAlmacen);
     unset($recepcion);
     return $unidadesRecepcionadas;
 }
 /**
  * Crea un registro nuevo
  *
  * Si viene por GET muestra un template vacio
  * Si viene por POST crea un registro
  *
  * @return array con el template y valores a renderizar
  */
 public function newAction()
 {
     if ($this->values['permisos']['permisosModulo']['IN']) {
         switch ($this->request["METHOD"]) {
             case 'GET':
                 //MOSTRAR FORMULARIO VACIO
                 $datos = new MvtosAlmacen();
                 $this->values['datos'] = $datos;
                 $this->values['errores'] = array();
                 return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                 break;
             case 'POST':
                 //CREAR NUEVO REGISTRO
                 $datosRequest = $this->request['MvtosAlmacen'];
                 $valores = array('UM' => 'UMA', 'Reales' => $datosRequest['Unidades'], 'Pales' => $datosRequest['Pales'], 'Cajas' => $datosRequest['Cajas']);
                 $tipoMvtos = new TiposMvtosAlmacen($datosRequest['IDTipo']);
                 $signo = $tipoMvtos->getSigno()->getIDTipo();
                 $documento = $tipoMvtos->getTipoDocumento();
                 unset($tipoMvtos);
                 $idAlmacen = $datosRequest['IDAlmacen'];
                 $idArticulo = $datosRequest['IDArticulo'];
                 $idLote = $datosRequest['IDLote'];
                 $idUbicacion = $datosRequest['IDUbicacion'];
                 $datos = new MvtosAlmacen();
                 $datos->setDescripcion($datosRequest['Descripcion']);
                 $datos->setObservaciones($datosRequest['Observaciones']);
                 if ($datos->genera($documento, $signo, 0, $idAlmacen, $idArticulo, $idLote, $idUbicacion, 0, $valores)) {
                     $this->values['errores'] = $datos->getErrores();
                     $this->values['alertas'] = $datos->getAlertas();
                     //Recargo el objeto para refrescar las propiedas que
                     //hayan podido ser objeto de algun calculo durante el proceso
                     //de guardado.
                     $datos = new MvtosAlmacen($datos->getPrimaryKeyValue());
                     $this->values['datos'] = $datos;
                     if ($this->values['errores']) {
                         return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                     } else {
                         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                     }
                 } else {
                     $this->values['datos'] = $datos;
                     $this->values['errores'] = $datos->getErrores();
                     $this->values['alertas'] = $datos->getAlertas();
                     return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                 }
                 break;
         }
     } else {
         return array('template' => '_global/forbiden.html.twig');
     }
 }
 public function newAction()
 {
     if ($this->request['METHOD'] == 'POST') {
         $datosRequest = $this->request['MvtosAlmacen'];
         if ($this->valida($datosRequest)) {
             $valores = array('UM' => 'UMA', 'Reales' => $datosRequest['Unidades'], 'Pales' => $datosRequest['Pales'], 'Cajas' => $datosRequest['Cajas'], 'Reservadas' => 0, 'Entrando' => 0);
             $mvtoSalida = new MvtosAlmacen();
             $mvtoEntrada = new MvtosAlmacen();
             // Movimiento de salida
             $ok = $mvtoSalida->genera('MvtoInterno', 'S', 0, $datosRequest['IDAlmacen'], $datosRequest['IDArticulo'], $datosRequest['IDLote'], $datosRequest['IDUbicacion'], 0, $valores);
             // Movimiento de entrada en la ubicacion destino
             if ($ok) {
                 $mvtoEntrada->genera('MvtoInterno', 'E', 0, $datosRequest['IDAlmacen'], $datosRequest['IDArticulo'], $datosRequest['IDLote'], $datosRequest['IDUbicacionDestino'], 0, $valores);
             }
             unset($mvtoEntrada);
             unset($mvtoSalida);
         } else {
             $this->values['errores'] = $this->errores;
         }
     }
     return $this->IndexAction();
 }
 /**
  * Cierra el inventario.
  * 
  * Consiste en generar los movimientos de almacén necesarios
  * para dejar las existencias de cada articulo/lote/ubicación 
  * según lo indicado en las líneas de inventario
  */
 public function cierra()
 {
     $ok = true;
     // Si no está cerrado
     if ($this->Cerrado == 0) {
         $lineas = new InventariosLineas();
         $rows = $lineas->cargaCondicion("*", "IDInventario='{$this->IDInventario}'");
         unset($lineas);
         $exi = new Existencias();
         foreach ($rows as $row) {
             // Buscar la existencias que hay para calcular el mvto
             // de almacén de tal forma que se queden como dice el inventario
             $stock = $exi->cargaCondicion("*", "IDAlmacen='{$this->IDAlmacen}' and IDArticulo='{$row['IDArticulo']}' and IDLote='{$row['IDLote']}' and IDUbicacion='{$row['IDUbicacion']}'");
             $valores = array('UM' => 'UMA', 'Reales' => $row['Stock'] - $stock[0]['Reales'], 'Pales' => $row['Pales'] - $stock[0]['Pales'], 'Cajas' => $row['Cajas'] - $stock[0]['Cajas'], 'Reservadas' => 0, 'Entrando' => 0);
             /**
             if ($valores['Reales']>=0)
                 $signo = "E";
             else {
                 $signo = "S";
                 $valores['Reales'] = abs($valores['Reales']);
             }
             */
             $signo = "E";
             $mvtoAlmacen = new MvtosAlmacen();
             $ok = $mvtoAlmacen->genera('InventariosCab', $signo, $this->IDInventario, $this->IDAlmacen, $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores);
             // Valores con los que actualizar
         }
         unset($exi);
         unset($mvtoAlmacen);
         // Marcar el inventario como cerrado
         if ($ok) {
             $this->setCerrado(1);
             $this->save();
         }
     }
     return $ok;
 }
Example #6
0
 /**
  * Devuelve los mvtos de almacén del artículo en curso para
  * el almacen y el periodo de fechas indicado.
  * 
  * Los movimientos se ordenan por almacén y descendentemente por fecha y hora
  * 
  * @param integer $idAlmacen Por defecto todos los almacenes
  * @param date $desdeFecha Por defecto todas
  * @param date $hastaFecha Por defecto todas
  * @return array
  */
 public function getMvtosAlmacen($idAlmacen = 0, $desdeFecha = '', $hastaFecha = '')
 {
     $array = array();
     $filtro = "(mv.IDArticulo='{$this->IDArticulo}')";
     $filtro .= $idAlmacen <= 0 ? " and (1)" : " and (mv.IDAlmacen='{$idAlmacen}')";
     $filtro .= $desdeFecha == '' ? " and (1)" : " and (mv.Fecha>='{$desdeFecha}')";
     $filtro .= $hastaFecha == '' ? " and (1)" : " and (mv.Fecha<='{$hastaFecha}')";
     $mvtosAlmacen = new MvtosAlmacen();
     $tablaMvtos = $mvtosAlmacen->getDataBaseName() . "." . $mvtosAlmacen->getTableName();
     $almacenes = new Almacenes();
     $tablaAlmacenes = $almacenes->getDataBaseName() . "." . $almacenes->getTableName();
     $tipos = new TiposMvtosAlmacen();
     $tablaTipos = $tipos->getDataBaseName() . "." . $tipos->getTableName();
     $em = new EntityManager($this->getConectionName());
     if ($em->getDbLink()) {
         $query = "select\n                        al.Nombre as Almacen,\n                        ti.Descripcion,\n                        ti.Signo,\n                        ti.TipoDocumento,\n                        mv.Fecha,\n                        mv.Hora,\n                        mv.IDUbicacion,\n                        mv.IDLote,\n                        mv.IDDocumento,\n                        mv.UnidadesE,\n                        mv.UnidadesS\n                      from\n                        {$tablaMvtos} as mv\n                        left join {$tablaAlmacenes} as al on mv.IDAlmacen=al.IDAlmacen                        \n                        left join {$tablaTipos} as ti on mv.IDTipo=ti.Id                        \n                      where {$filtro}\n                      order by mv.IDAlmacen,mv.Fecha DESC,mv.Hora DESC";
         $em->query($query);
         $array = $em->fetchResult();
         $em->desConecta();
     }
     unset($em);
     return $array;
 }
Example #7
0
 /**
  * Devuelve true o false dependiende si tiene o no movimientos de almacén
  * 
  * @return boolean TRUE si el lote tiene mvtos de almacen
  */
 public function TieneMvtos()
 {
     $mvtos = new MvtosAlmacen();
     $filtro = "IDLote='{$this->getPrimaryKeyValue()}'";
     $rows = $mvtos->cargaCondicion("Count(Id) as nLotes", $filtro);
     unset($mvtos);
     return $rows[0]['nLotes'] > 0;
 }