private static function ObtenerEmpresasParaAsignacionVenta($detalle_producto = null, $detalle_paquete = null, $detalle_orden = null) { //inicializa los arreglos base $empresas = array(); $id_empresas = array("id" => array(), "total" => array()); //bandera que indica si se recibio alguno de los 3 detalles $parametro = false; //Para todos los detalles, se recorre el detalle recibido, se validan sus datos //y se buscan las empresas que tengan ese elemento. Despues se llama al metodo //InsertarIdEmpresa que se encarga de acomodar el arreglo de empresas y su total //correspondiente if (!is_null($detalle_producto)) { $parametro = true; $producto_empresa = new ProductoEmpresa(); foreach ($detalle_producto as $d_p) { $producto_empresa->setIdProducto($d_p["id_producto"]); $productos_empresa = ProductoEmpresaDAO::search($producto_empresa); foreach ($productos_empresa as $p_e) { self::InsertarIdEmpresa($p_e, $id_empresas, $d_p["precio"] * $d_p["cantidad"]); } } } if (!is_null($detalle_paquete)) { $parametro = true; $paquete_empresa = new PaqueteEmpresa(); foreach ($detalle_paquete as $d_p) { $paquete_empresa->setIdPaquete($d_p["id_paquete"]); $paquetes_empresa = PaqueteEmpresaDAO::search($paquete_empresa); foreach ($paquetes_empresa as $p_e) { self::InsertarIdEmpresa($p_e, $id_empresas, $d_p["precio"] * $d_p["cantidad"]); } } } if (!is_null($detalle_orden)) { $parametro = true; $servicio_empresa = new ServicioEmpresa(); foreach ($detalle_orden as $orden) { $orden_de_servicio = OrdenDeServicioDAO::getByPK($orden["id_orden_de_servicio"]); $servicio_empresa->setIdServicio($orden_de_servicio->getIdServicio()); $servicios_empresa = ServicioEmpresaDAO::search($servicio_empresa); foreach ($servicios_empresa as $s_e) { self::InsertarIdEmpresa($s_e, $id_empresas, $orden["precio"]); } } } //Si no se recibio ningun detalle se arroja una excepcion if (!$parametro) { throw new Exception("No se recibio un id_producto ni un id_paquete ni un id_orden"); } return $id_empresas; }
/** * *Edita un servicio * * @param id_servicio int Id del servicio a editar * @param sucursales json Sucursales en las cuales estara disponible este servicio * @param nombre_servicio string Nombre del servicio * @param garantia int Si este servicio tiene una garanta en meses. * @param impuestos json array de ids de impuestos que tiene este servico * @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 empresas string Objeto que contiene los ids de las empresas a las que pertenece este servicio * @param codigo_servicio string Codigo de control del servicio manejado por la empresa, no se puede repetir * @param descripcion_servicio string Descripcion del servicio * @param compra_en_mostrador string 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 activo bool Si el servicio esta activo o no * @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 Url de la foto del servicio * @param margen_de_utilidad string Un porcentage de 0 a 100 si queremos que este servicio marque utilidad en especifico * @param clasificaciones json Uno o varios id_clasificacion de este servicio, esta clasificacion esta dada por el usuario Array * @param retenciones json Ids de retenciones que afectan este servicio * @param costo_estandar float Valor del costo estandar del servicio **/ public static function Editar($id_servicio, $clasificaciones = null, $codigo_servicio = null, $compra_en_mostrador = null, $control_de_existencia = null, $costo_estandar = null, $descripcion_servicio = null, $empresas = null, $extra_params = null, $foto_servicio = null, $garantia = null, $impuestos = null, $metodo_costeo = null, $nombre_servicio = null, $precio = null, $retenciones = null, $sucursales = null) { Logger::log("Editando servicio " . $id_servicio); //valida los parametros recibidos $validar = self::validarParametrosServicio($id_servicio, $nombre_servicio, $metodo_costeo, $codigo_servicio, $compra_en_mostrador, null, $descripcion_servicio, $costo_estandar, $garantia, $control_de_existencia, $foto_servicio, $precio); if (is_string($validar)) { Logger::error($validar); throw new Exception($validar); } //Los parametros que no sean nulos seran tomados como actualizacion $servicio = ServicioDAO::getByPK($id_servicio); if (!is_null($nombre_servicio)) { $servicio->setNombreServicio(trim($nombre_servicio)); } if (!is_null($garantia)) { $servicio->setGarantia($garantia); } if (!is_null($codigo_servicio)) { $servicio->setCodigoServicio(trim($codigo_servicio)); } if (!is_null($descripcion_servicio)) { $servicio->setDescripcionServicio($descripcion_servicio); } if (!is_null($compra_en_mostrador)) { $servicio->setCompraEnMostrador($compra_en_mostrador); } if (!is_null($control_de_existencia)) { $servicio->setControlExistencia($control_de_existencia); } if (!is_null($extra_params)) { $servicio->setExtraParams(json_encode($extra_params)); } if (!is_null($foto_servicio)) { $servicio->setFotoServicio($foto_servicio); } if (!is_null($costo_estandar)) { if (!is_numeric($costo_estandar) || $costo_estandar < 0) { throw new Exception("Indique un valor de costo valido"); } $servicio->setCostoEstandar($costo_estandar); } if (!is_null($precio)) { if (!is_numeric($precio) || $precio < 0) { throw new Exception("Indique un valor de precio valido"); } $servicio->setPrecio($precio); } if (!is_null($metodo_costeo)) { if ($metodo_costeo == "costo" && is_null($costo_estandar)) { throw new Exception("Indique un valor de costo"); } if ($metodo_costeo == "precio" && is_null($precio)) { throw new Exception("Indique un valor de precio"); } $servicio->setMetodoCosteo($metodo_costeo); } //Se verifica que se cuente con el atributo que busca el metodo de costeo if ($servicio->getMetodoCosteo() == "precio" && is_null($servicio->getPrecio()) || $servicio->getMetodoCosteo() == "costo" && is_null($servicio->getCostoEstandar())) { Logger::error("No se cuenta con el parametro " . $metodo_costeo); throw new Exception("No se cuenta con el parametro " . $metodo_costeo); } //Se actualiza el registro de servicio. Si se reciben listas de empresas, sucursales, clasificaciones, impuestos //y/o retenciones, se recorre la lista y se guardan o actualizan los que se encuentren. //Despues se recorren los registros acutales y se buscan en las listas recibidas, si no son encontrados son eliminados //de la base de datos 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); } $servicios_empresa = ServicioEmpresaDAO::search(new ServicioEmpresa(array("id_servicio" => $id_servicio))); foreach ($servicios_empresa as $s_e) { $encontrado = false; foreach ($empresas as $empresa) { if ($empresa == $s_e->getIdEmpresa()) { $encontrado = true; } } if (!$encontrado) { ServicioEmpresaDAO::delete($s_e); } } } /* 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); } $servicios_sucursal = ServicioSucursalDAO::search(new ServicioSucursal(array("id_servicio" => $id_servicio))); foreach ($servicios_sucursal as $s_s) { $encontrado = false; foreach ($sucursales as $sucursal) { if ($sucursal == $s_s->getIdSucursal()) { $encontrado = true; } } if (!$encontrado) { ServicioSucursalDAO::delete($s_s); } } } /* 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); } $servicios_clasificacion = ServicioClasificacionDAO::search(new ServicioClasificacion(array("id_servicio" => $id_servicio))); foreach ($servicios_clasificacion as $s_c) { $encontrado = false; foreach ($clasificaciones as $clasificacion) { if ($clasificacion == $s_c->getIdClasificacionServicio()) { $encontrado = true; } } if (!$encontrado) { ServicioClasificacionDAO::delete($s_c); } } } /* 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); } $impuesto_servicio = ImpuestoServicioDAO::search(new ImpuestoServicio(array("id_servicio" => $id_servicio))); foreach ($impuesto_servicio as $i_s) { $encontrado = false; foreach ($impuestos as $impuesto) { if ($impuesto == $i_s->getIdImpuesto()) { $encontrado = true; } } if (!$encontrado) { ImpuestoServicioDAO::delete($i_s); } } } /* 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); } $retencion_servicio = RetencionServicioDAO::search(new RetencionServicio(array("id_servicio" => $id_servicio))); foreach ($retencion_servicio as $r_s) { $encontrado = false; foreach ($retenciones as $retencion) { if ($retencion == $r_s->getIdRetencion()) { $encontrado = true; } } if (!$encontrado) { RetencionServicioDAO::delete($r_s); } } } /* Fin if de impuestos */ } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo editar el servicio " . $id_servicio . " : " . $e); if ($e->getCode() == 901) { throw new Exception("No se pudo editar el servicio: " . $e->getMessage(), 901); } throw new Exception("No se pudo editar el servicio", 901); } DAO::transEnd(); Logger::log("Servicio editado exitosamente"); }