Example #1
0
 /**
  *
  *Crear un nuevo concepto de servicio.
  *
  * @param costo_estandar float Valor del costo estandar del servicio
  * @param metodo_costeo string Mtodo de costeo del servicio: 1 = Costo Promedio en Base a Entradas.2 = Costo Promedio en Base a Entradas Almacn.3 = ltimo costo.4 = UEPS.5 = PEPS.6 = Costo especfico.7 = Costo Estndar
  * @param nombre_servicio string Nombre del servicio
  * @param codigo_servicio string Codigo de control del servicio manejado por la empresa, no se puede repetir
  * @param empresas json Objeto que contiene los ids de las empresas a las que pertenece este servicio
  * @param compra_en_mostrador bool Verdadero si este servicio se puede comprar en mostrador, para aquello de compra-venta. Para poder hacer esto, el sistema debe poder hacer compras en mostrador
  * @param sucursales json Sucursales en las que estara disponible este servicio
  * @param descripcion_servicio string Descripcion del servicio
  * @param garantia int Si este servicio tiene una garanta en meses.
  * @param retenciones json Ids de las retenciones que afectan este servicio
  * @param impuestos json array de ids de impuestos que tiene este servico
  * @param activo bool Si queremos que este activo o no mientras lo insertamos
  * @param clasificaciones json Uno o varios id_clasificacion de este servicio, esta clasificacion esta dada por el usuario   Array
  * @param margen_de_utilidad float Un porcentage de 0 a 100 si queremos que este servicio marque utilidad en especifico
  * @param control_de_existencia int 00000001 = Unidades. 00000010 = Caractersticas. 00000100 = Series. 00001000 = Pedimentos. 00010000 = LoteCaractersticas. 00000100 = Series. 00001000 = Pedimentos. 00010000 = Lote
  * @param foto_servicio string La url de la foto del servicio
  * @return id_servicio int Id del servicio creado
  **/
 public static function Nuevo($codigo_servicio, $compra_en_mostrador, $costo_estandar, $metodo_costeo, $nombre_servicio, $activo = true, $clasificaciones = null, $control_de_existencia = null, $descripcion_servicio = null, $empresas = null, $extra_params = null, $foto_servicio = null, $garantia = null, $impuestos = null, $precio = null, $retenciones = null, $sucursales = null)
 {
     Logger::log("Creando nuevo servicio `{$nombre_servicio}`...");
     $r = ServicioDAO::search(new Servicio(array("codigo_servicio" => $codigo_servicio)));
     if (sizeof($r) > 0) {
         throw new BusinessLogicException("ya existe este codigo de servicio");
     }
     //se validan los parametros recibidos
     $validar = self::validarParametrosServicio(null, $nombre_servicio, $metodo_costeo, $codigo_servicio, $compra_en_mostrador, $activo, $descripcion_servicio, $costo_estandar, $garantia, $control_de_existencia, $foto_servicio, $precio);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new BusinessLogicException($validar);
     }
     //valida que se haya recibido el parametro esperado por el metodo de costeo
     if ($metodo_costeo == "precio" && is_null($precio) || $metodo_costeo == "costo" && is_null($costo_estandar)) {
         Logger::error("No se recibio el parametro correspondiente al metodo de costeo (" . $metodo_costeo . ")");
         throw new Exception("No se recibio el parametro correspondiente al metodo de costeo (" . $metodo_costeo . ")");
     }
     if (is_null($activo)) {
         $activo = 1;
     }
     //Se inicializa el registro de servicio
     $servicio = new Servicio(array("costo_estandar" => $costo_estandar, "metodo_costeo" => $metodo_costeo, "nombre_servicio" => trim($nombre_servicio), "codigo_servicio" => trim($codigo_servicio), "compra_en_mostrador" => $compra_en_mostrador, "activo" => $activo, "descripcion_de_servicio" => $descripcion_servicio, "garantia" => $garantia, "control_existencia" => $control_de_existencia, "foto_servicio" => $foto_servicio, "precio" => $precio, "extra_params" => null));
     if (!is_null($extra_params)) {
         $servicio->setExtraParams(json_encode($extra_params));
     }
     //Se guarda el registro. Si se reciben empresas, sucursales, impuestos y/o retenciones, se guardan
     //los respectivos registros con la informacion obtenida
     DAO::transBegin();
     try {
         ServicioDAO::save($servicio);
         if (!is_null($empresas)) {
             $empresas = object_to_array($empresas);
             if (!is_array($empresas)) {
                 throw new Exception("Las empresas son invalidas", 901);
             }
             $servicio_empresa = new ServicioEmpresa(array("id_servicio" => $servicio->getIdServicio()));
             foreach ($empresas as $empresa) {
                 $validar = self::validarParametrosServicioEmpresa($empresa);
                 if (is_string($validar)) {
                     throw new Exception($validar, 901);
                 }
                 $servicio_empresa->setIdEmpresa($empresa);
                 ServicioEmpresaDAO::save($servicio_empresa);
             }
         }
         /* Fin if de empresas */
         if (!is_null($sucursales)) {
             $sucursales = object_to_array($sucursales);
             if (!is_array($sucursales)) {
                 throw new Exception("Las sucursales no son validas", 901);
             }
             $servicio_sucursal = new ServicioSucursal(array("id_servicio" => $servicio->getIdServicio()));
             foreach ($sucursales as $sucursal) {
                 $validar = self::validarParametrosServicioSucursal($sucursal);
                 if (is_string($validar)) {
                     throw new Exception($validar, 901);
                 }
                 $servicio_sucursal->setIdSucursal($sucursal);
                 ServicioSucursalDAO::save($servicio_sucursal);
             }
         }
         /* Fin if de sucursales */
         if (!is_null($clasificaciones)) {
             $clasificaciones = object_to_array($clasificaciones);
             if (!is_array($clasificaciones)) {
                 throw new Exception("Las clasificaciones son invalidas", 901);
             }
             $servicio_clasificacion = new ServicioClasificacion(array("id_servicio" => $servicio->getIdServicio()));
             foreach ($clasificaciones as $clasificacion) {
                 if (is_null(ClasificacionServicioDAO::getByPK($clasificacion))) {
                     throw new Exception("La clasificacion " . $clasificacion . " no existe", 901);
                 }
                 $servicio_clasificacion->setIdClasificacionServicio($clasificacion);
                 ServicioClasificacionDAO::save($servicio_clasificacion);
             }
         }
         /* Fin if de clasificaciones */
         if (!is_null($impuestos)) {
             $impuestos = object_to_array($impuestos);
             if (!is_array($impuestos)) {
                 throw new Exception("Los impuestos son invalidos", 901);
             }
             $impuesto_servicio = new ImpuestoServicio(array("id_servicio" => $servicio->getIdServicio()));
             foreach ($impuestos as $impuesto) {
                 if (is_null(ImpuestoDAO::getByPK($impuesto))) {
                     throw new Exception("El impuesto " . $impuesto . " no existe", 901);
                 }
                 $impuesto_servicio->setIdImpuesto($impuesto);
                 ImpuestoServicioDAO::save($impuesto_servicio);
             }
         }
         /* Fin if de impuestos */
         if (!is_null($retenciones)) {
             $retenciones = object_to_array($retenciones);
             if (!is_array($retenciones)) {
                 throw new Exception("Las retenciones son invalidas", 901);
             }
             $retencion_servicio = new RetencionServicio(array("id_servicio" => $servicio->getIdServicio()));
             foreach ($retenciones as $retencion) {
                 if (is_null(RetencionDAO::getByPK($retencion))) {
                     throw new Exception("La retencion " . $retencion . " no existe", 901);
                 }
                 $retencion_servicio->setIdRetencion($retencion);
                 RetencionServicioDAO::save($retencion_servicio);
             }
         }
         /* Fin if de impuestos */
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear el nuevo servicio: " . $e);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudo crear el nuevo servicio: " . $e->getMessage(), 901);
         }
         throw new Exception("No se pudo crear el nuevo servicio", 901);
     }
     DAO::transEnd();
     Logger::log("Servicio creado exitosamente");
     return array("id_servicio" => $servicio->getIdServicio());
 }