public static function init($row, $id = null)
 {
     $objDetRegistracion = new DetalleRegistracion();
     try {
         if (is_null($id)) {
             $objDetRegistracion->setId($row->de_re_id);
         } else {
             $objDetRegistracion->setId($row->{$id});
             throw new \Exception();
         }
         $objDetRegistracion->setValor($row->de_re_valor);
         $objDetRegistracion->setTipoMovimiento($row->de_re_tipo_movimiento);
         $objDetRegistracion->isFromDb(true);
     } catch (\Exception $e) {
         return $objDetRegistracion;
     }
     $maestro = MaestroBaseDao::init($row, "ma_ba_maestro");
     $objDetRegistracion->setMaestro($maestro);
     $registracion = RegistracionDao::init($row, "reg_registracion");
     $objDetRegistracion->setRegistracion($registracion);
     $item = RegistracionDao::init($row, "it_item");
     $objDetRegistracion->setItem($item);
     return $objDetRegistracion;
 }
Example #2
0
 /**
  * Crear Detalle
  * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator
  * @param \Tesoreria\Models\Registracion $objRegistracion
  * @param \Tesoreria\Models\ERequest $request
  * @return boolean
  * @throws Exception
  */
 public static function crearDetalle($serviceLocator, $objRegistracion, $request)
 {
     self::init($serviceLocator);
     if (array_key_exists("item", $request->param_da)) {
         $param_da = $request->param_da->item;
     } else {
         $param_da = $request->param_da;
     }
     $allDetallesRegistracion = array();
     foreach ($param_da as $key_pa => $param) {
         $objMaestro = new MaestroBase();
         $objMaestro->setId($param->maestro_base->id);
         if (array_key_exists("item", $param->lista_configuraciones)) {
             $listaConfiguracion = $param->lista_configuraciones->item;
         } else {
             $listaConfiguracion = $param->lista_configuraciones;
         }
         if (!is_array($listaConfiguracion)) {
             $listaConfiguracion = array($listaConfiguracion);
         }
         $tipo = $param->tipo;
         $valorParam = $param->valor;
         $condicion = "";
         if (!is_null($valorParam)) {
             foreach ($listaConfiguracion as $key => $listConf) {
                 $valorConf = $listConf->valor;
                 $nombre = $listConf->configuracion->nombre;
                 $tipo_dato = $listConf->configuracion->tipo_dato;
                 if ($tipo_dato != Constants::CONF_DA_SERIALIZACION) {
                     continue;
                 }
                 if ($key > 0) {
                     $condicion .= " AND ";
                 }
                 if (is_string($valorConf)) {
                     $condicion .= " " . $nombre . "= '" . $valorConf . "'";
                 } else {
                     $condicion .= " " . $nombre . "=" . $valorConf;
                 }
             }
             $resultSetItem = ExpStoresProcedures::findItems($serviceLocator, $param->maestro_base->id, $condicion);
             if ($tipo == Constants::MO_SALIDA_CORTO && count($resultSetItem) == 0) {
                 throw new Exception("Error: no existe el item para hacer un movimiento de salida");
             } else {
                 if ($tipo == Constants::MO_ENTRADA_CORTO && count($resultSetItem) == 0) {
                     $item = new Item();
                     $item->setMaestro($objMaestro);
                     $item->setCantidad($valorParam);
                     $objItem = self::$itemDao->save($item);
                     if (!$objItem) {
                         throw new Exception("Error: no se pudo crear el item para hacer el movimiento de entrada");
                     }
                     #creacion de los usos de datos adicionales
                     foreach ($listaConfiguracion as $listConf) {
                         $valorConf = $listConf->valor;
                         $confDA = new ConfDatosAdicionales();
                         $confDA->setId($listConf->configuracion->id);
                         $usoDAItem = new UsoDAItem();
                         $usoDAItem->setItem($objItem);
                         $usoDAItem->setValor($valorConf);
                         $usoDAItem->setConfDatosAdicionales($confDA);
                         $objUsoDAItem = self::$usoDAItemDao->save($usoDAItem);
                         if (!$objUsoDAItem) {
                             throw new Exception("Error: no se pudo crear el item para hacer el movimiento de entrada");
                         }
                     }
                 } else {
                     $objItem = self::$itemDao->getOneObject(array('it_id' => $resultSetItem[0]->it_id));
                     if ($valorParam > 0) {
                         #actualiza cantidad en item
                         $cantidad = $objItem->getCantidad();
                         $nuevaCantidad = 0;
                         if ($tipo == Constants::MO_SALIDA_CORTO) {
                             $nuevaCantidad = $cantidad - $valorParam;
                         } else {
                             if ($tipo == Constants::MO_ENTRADA_CORTO) {
                                 $nuevaCantidad = $cantidad + $valorParam;
                             } else {
                                 throw new Exception("Error: el item no posee el tipo de movimiento");
                             }
                         }
                         $objItem->setCantidad($nuevaCantidad);
                         if (!self::$itemDao->save($objItem)) {
                             throw new Exception("Error: el item no pudo ser actualizado - " . $objItem->id);
                         }
                     }
                 }
             }
             $tipoMovimiento = Constants::MO_ENTRADA;
             if ($tipo == Constants::MO_SALIDA_CORTO) {
                 $tipoMovimiento = Constants::MO_SALIDA;
             }
             $detalleRegistracion = new DetalleRegistracion();
             $detalleRegistracion->setRegistracion($objRegistracion);
             $detalleRegistracion->setMaestro($objMaestro);
             $detalleRegistracion->setItem($objItem);
             $detalleRegistracion->setTipoMovimiento($tipoMovimiento);
             $detalleRegistracion->setValor($valorParam);
             $allDetallesRegistracion[] = $detalleRegistracion;
             $objDetalleRegistracion = self::$detalleRegistracionDao->save($detalleRegistracion);
             if (!$objDetalleRegistracion) {
                 throw new Exception("Error: no se pudo crear el detalle de la registracion");
             }
         }
     }
     # HASH DE LA REGISTRACION
     $generator = new ExpStringGenerator();
     $tokenLength = 20;
     $hash = $generator->generate($tokenLength);
     $objRegistracion->setHashControl($hash);
     $objRegistracionUpdated = self::$registracionDao->save($objRegistracion);
     if (!$objRegistracionUpdated) {
         throw new Exception("Error: no se pudo actualizar el objeto registracion");
     }
     return true;
 }