/** * *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()); }