/** * *Edita la informacion de un impuesto * * @param id_impuesto int Id del impuesto a editar * @param es_monto bool Si es verdadero, el campo de monto_porcentaje sera tomado como un monto fijo, si es false, sera tomado como un porcentaje * @param monto_porcentaje float Monto o porcentaje que representa este impuesto * @param descripcion string Descripcion larga del impuesto * @param nombre string Nombre del impuesto **/ public static function EditarImpuesto($id_impuesto, $descripcion = null, $es_monto = null, $monto_porcentaje = null, $nombre = null) { Logger::log("Editando impuesto " . $id_impuesto); $impuesto = ImpuestoDAO::getByPK($id_impuesto); //Se valida que el impuesto a editar exista if (is_null($impuesto)) { Logger::error("El impuesto " . $id_impuesto . " no existe"); throw new Exception("El impuesto " . $id_impuesto . " no existe"); } //Se validan y actualizan solo los parametros que son recibidos. if (!is_null($es_monto)) { $e = self::validarEsMonto($es_monto); if (is_string($e)) { Logger::error($e); throw new Exception($e); } $impuesto->setEsMonto($es_monto); } if (!is_null($monto_porcentaje)) { $e = self::validarMontoPorcentaje($monto_porcentaje); if (is_string($e)) { Logger::error($e); throw new Exception($e); } $impuesto->setMontoPorcentaje($monto_porcentaje); } if (!is_null($descripcion)) { $e = self::validarDescripcion($descripcion); if (is_string($e)) { Logger::error($e); throw new Exception($e); } $impuesto->setDescripcion($descripcion); } if (!is_null($nombre)) { $e = self::validarNombre($nombre); if (is_string($e)) { Logger::error($e); throw new Exception($e); } $impuesto->setNombre($nombre); } DAO::transBegin(); try { ImpuestoDAO::save($impuesto); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo editar el impuesto: " . $e); throw new Exception("No se pudo editar el impuesto, consulte al administrador del sistema"); } DAO::transEnd(); Logger::log("Impuesto editado exitosamente"); }
/** * *Edita la informacion de una clasificacion de proveedor * * @param id_clasificacion_proveedor int Id de la clasificacion del proveedor a editar * @param retenciones json Ids de las retenciones de la clasificacion de proveedor * @param impuestos json Ids de los impuestos de la clasificacion del proveedor * @param descripcion string Descripcion de la clasificacion del proveedor * @param nombre string Nombre de la clasificacion del proveedor **/ public static function EditarClasificacion($id_clasificacion_proveedor, $descripcion = null, $id_tarifa_compra = null, $id_tarifa_venta = null, $impuestos = null, $nombre = null, $retenciones = null) { Logger::log("Editando la clasificacion de proveedor " . $id_clasificacion_proveedor); //valida los parametros recibidos $validar = self::validarParametrosClasificacionProveedor($id_clasificacion_proveedor, $nombre, $descripcion, null, $id_tarifa_compra, $id_tarifa_venta); if (is_string($validar)) { Logger::error($validar); throw new Exception($validar); } //Los parametros que no sean nulos seran tomados como actualizacion $clasificacion_proveedor = ClasificacionProveedorDAO::getByPK($id_clasificacion_proveedor); if (!is_null($descripcion)) { $clasificacion_proveedor->setDescripcion($descripcion); } if (!is_null($nombre)) { $clasificacion_proveedor->setNombre($nombre); } $cambio_tarifa_compra = false; $cambio_tarifa_venta = false; if (!is_null($id_tarifa_compra)) { if ($id_tarifa_compra != $clasificacion_proveedor->getIdTarifaCompra()) { $cambio_tarifa_compra = true; $clasificacion_proveedor->setIdTarifaCompra($id_tarifa_compra); } } if (!is_null($id_tarifa_venta)) { if ($id_tarifa_venta != $clasificacion_proveedor->getIdTarifaVenta()) { $cambio_tarifa_venta = true; $clasificacion_proveedor->setIdTarifaVenta($id_tarifa_venta); } } //Se actualiza el registro. Si se reciben listas de impuestos y/o registros se guardan los //que estan en la lista, despues se recorren los registros de la base de datos y aquellos que no //se encuentren en la lista nueva seran eliminados. DAO::transBegin(); try { ClasificacionProveedorDAO::save($clasificacion_proveedor); //Si se cambia la tarifa de compra o de venta, se actualizan aquellos proveedores //con etsa clasificacion de proveedor y cuya tarifa haya sido obtenida por el rol //o por la clasificacion de proveedor. if ($cambio_tarifa_compra || $cambio_tarifa_venta) { $proveedores = UsuarioDAO::search(new Usuario(array("id_clasificacion_proveedor" => $id_clasificacion_proveedor))); foreach ($proveedores as $proveedor) { if ($cambio_tarifa_compra) { if ($proveedor->getTarifaCompraObtenida() == "rol" || $proveedor->getTarifaCompraObtenida() == "proveedor") { $proveedor->setIdTarifaCompra($id_tarifa_compra); $proveedor->setTarifaCompraObtenida("proveedor"); } } if ($cambio_tarifa_venta) { if ($proveedor->getTarifaVentaObtenida() == "rol" || $proveedor->getTarifaVentaObtenida() == "proveedor") { $proveedor->setIdTarifaVenta($id_tarifa_venta); $proveedor->setTarifaVentaObtenida("proveedor"); } } UsuarioDAO::save($proveedor); } } if (!is_null($impuestos)) { $impuestos = object_to_array($impuestos); if (!is_array($impuestos)) { throw new Exception("Los impuestos son invalidos"); } $impuesto_clasificacion_proveedor = new ImpuestoClasificacionProveedor(array("id_clasificacion_proveedor" => $clasificacion_proveedor->getIdClasificacionProveedor())); foreach ($impuestos as $impuesto) { if (is_null(ImpuestoDAO::getByPK($impuesto))) { throw new Exception("El impuesto " . $impuesto . " no existe", 901); } $impuesto_clasificacion_proveedor->setIdImpuesto($impuesto); ImpuestoClasificacionProveedorDAO::save($impuesto_clasificacion_proveedor); } $impuestos_clasificacion_proveedor = ImpuestoClasificacionProveedorDAO::search(new ImpuestoClasificacionProveedor(array("id_clasificacion_proveedor" => $id_clasificacion_proveedor))); foreach ($impuestos_clasificacion_proveedor as $impuesto_clasificacion_proveedor) { $encontrado = false; foreach ($impuestos as $impuesto) { if ($impuesto == $impuesto_clasificacion_proveedor->getIdImpuesto()) { $encontrado = true; } } if (!$encontrado) { ImpuestoClasificacionProveedorDAO::delete($impuesto_clasificacion_proveedor); } } } /* 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_clasificacion_proveedor = new RetencionClasificacionProveedor(array("id_clasificacion_proveedor" => $clasificacion_proveedor->getIdClasificacionProveedor())); foreach ($retenciones as $retencion) { if (is_null(RetencionDAO::getByPK($retencion))) { throw new Exception("La retencion " . $retencion . " no existe", 901); } $retencion_clasificacion_proveedor->setIdRetencion($retencion); RetencionClasificacionProveedorDAO::save($retencion_clasificacion_proveedor); } $retenciones_clasificacion_proveedor = RetencionClasificacionProveedorDAO::search(new RetencionClasificacionProveedor(array("id_clasificacion_proveedor" => $id_clasificacion_proveedor))); foreach ($retenciones_clasificacion_proveedor as $retencion_clasificacion_proveedor) { $encontrado = false; foreach ($retenciones as $retencion) { if ($retencion == $retencion_clasificacion_proveedor->getIdRetencion()) { $encontrado = true; } } if (!$encontrado) { RetencionClasificacionProveedorDAO::delete($retencion_clasificacion_proveedor); } } } /* Fin if de retenciones */ } catch (Exception $e) { DAO::transRollback(); Logger::error("La clasificacion de proveedor no ha podido ser editada: " . $e); if ($e->getCode() == 901) { throw new Exception("La clasificacion de proveedor no ha podido ser editada: " . $e->getCode(), 901); } throw new Exception("La clasificacion de proveedor no ha podido ser editada", 901); } DAO::transEnd(); Logger::log("La clasificacion de proveedor ha sido eeditada exitosamente "); }
<?php define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); // // Requerir parametros // $page->requireParam("iid", "GET", "Este impuesto no existe."); $este_impuesto = ImpuestoDAO::getByPK($_GET["iid"]); // // Titulo de la pagina // $page->addComponent(new TitleComponent("Detalles de " . $este_impuesto->getNombre(), 2)); // // Menu de opciones // $menu = new MenuComponent(); $menu->addItem("Editar este impuesto", "impuestos.editar.impuesto.php?iid=" . $_GET["iid"]); $page->addComponent($menu); // // Forma de producto // $form = new DAOFormComponent($este_impuesto); $form->setEditable(false); $form->hideField(array("id_impuesto")); $page->addComponent($form); $page->render();
private static function validarParametrosImpuestoUsuario($id_impuesto = null, $id_usuario = null) { //valida que el impuesto exista en la base de datos if (!is_null($id_impuesto)) { if (is_null(ImpuestoDAO::getByPK($id_impuesto))) { return "El impuesto con id: " . $id_impuesto . " no existe"; } } //valida que el usuario exista en la base de datos if (!is_null($id_usuario)) { if (is_null(UsuarioDAO::getByPK($id_usuario))) { return "El usuario con id: " . $id_usuario . " no existe"; } } return true; }
/** *Detalles($id_empresa) * *Muestra los detalles de una empresa en especifico. * * @author Juan Manuel García Carmona <*****@*****.**> * @param id_empresa int Id de la empresa **/ public static function Detalles($id_empresa) { //verificamos si la empresa a consular existe if (!($empresa = EmpresaDAO::getByPK($id_empresa))) { Logger::error("No se tiene registro de la empresa {$id_empresa}"); throw new InvalidDataException("No se tiene registro de la empresa {$id_empresa}"); } //extraemos su domicilio fiscal if (!($direccion = DireccionDAO::getByPK($empresa->getIdDireccion()))) { $direccion = new stdClass(); } //relacionamos a la empresa con la direccion $empresa->direccion = $direccion; //obtenemos el logo $logo = LogoDAO::getByPK($empresa->getIdLogo()); if ($logo === NULL) { $logo = LogoDAO::getByPK(-1); } $empresa->logo = $logo->getImagen(); //obtenemos su contabilidad $contabilidad = array(); $contabilidad["moneda_base"] = EmpresaDAO::getMonedaBase($empresa->getIdEmpresa()); $contabilidad["ejercicio"] = EmpresaDAO::getEjercicioActual($empresa->getIdEmpresa()); //extraemos sus sucursales $sucursales = array(); $sucursales_empresa = SucursalEmpresaDAO::search(new SucursalEmpresa(array("id_empresa" => $id_empresa))); foreach ($sucursales_empresa as $sucursal_empresa) { if ($sucursal = SucursalDAO::getByPK($sucursal_empresa->getIdSucursal())) { array_push($sucursales, $sucursal); } } //obtenemos todos los impuestos relacionados a la empresa $impuestos_empresa = ImpuestoEmpresaDAO::search(new ImpuestoEmpresa(array("id_empresa" => $id_empresa))); //extraemos sus impuestos de compra $impuestos_compra = array(); foreach ($impuestos_empresa as $impuesto_compra_empresa) { if (!($impuesto = ImpuestoDAO::getByPK($impuesto_compra_empresa->getIdImpuesto()))) { Logger::warn("No se tiene registro de un impuesto con id = " . $impuesto_compra_empresa->getIdImpuesto()); throw new InvalidDataException("No se tiene registro de un impuesto con id = " . $impuesto_compra_empresa->getIdImpuesto()); } if ($impuesto->getAplica() === "compra" || $impuesto->getAplica() === "ambos") { array_push($impuestos_compra, $impuesto); } } //extraemos sus impuestos de venta $impuestos_venta = array(); foreach ($impuestos_empresa as $impuesto_venta_empresa) { if (!($impuesto = ImpuestoDAO::getByPK($impuesto_venta_empresa->getIdImpuesto()))) { Logger::warn("No se tiene registro de un impuesto con id = " . $impuesto_venta_empresa->getIdImpuesto()); throw new InvalidDataException("No se tiene registro de un impuesto con id = " . $impuesto_venta_empresa->getIdImpuesto()); } if ($impuesto->getAplica() === "venta" || $impuesto->getAplica() === "ambos") { array_push($impuestos_venta, $impuesto); } } return array("detalles" => $empresa, "sucursales" => $sucursales, "impuestos_compra" => $impuestos_compra, "impuestos_venta" => $impuestos_venta, "contabilidad" => $contabilidad); Logger::log("Detalles de la empresa enviados con exito"); }
/** * *Edita la informaci?n de un producto * * @param id_producto int Id del producto a editar * @param clasificaciones json Uno o varios id_clasificacion de este producto, esta clasificacion esta dada por el usuario * @param codigo_de_barras string El Codigo de barras para este producto * @param codigo_producto string Codigo del producto * @param compra_en_mostrador bool Verdadero si este producto se puede comprar en mostrador, para aquello de compra-venta * @param control_de_existencia int 00000001 = Unidades. 00000010 = Caractersticas. 00000100 = Series. 00001000 = Pedimentos. 00010000 = Lote * @param costo_estandar float Valor del costo estndar del producto. * @param costo_extra_almacen float Si este producto produce un costo extra por tenerlo en almacen * @param descripcion_producto string Descripcion larga del producto * @param empresas json arreglo de ids de empresas a las que pertenece este producto * @param foto_del_producto string url a una foto de este producto * @param garantia int Numero de meses de garantia con los que cuenta esta categoria de producto * @param id_unidad int La unidad preferente de este producto * @param id_unidad_compra int El id de la unidad de medida en la que se adquiere el producto al comprarlo * @param impuestos json array de ids de impuestos que tiene este producto * @param metodo_costeo string Puede ser "precio" o "costo" e indican si el precio final sera tomado a partir del costo del producto o del precio del mismo * @param nombre_producto string Nombre del producto * @param peso_producto float el peso de este producto en KG * @param precio int El precio de este producto * @param visible_en_vc bool Verdadero si este producto sera visible a los clientes. **/ static function Editar($id_producto, $clasificaciones = null, $codigo_de_barras = null, $codigo_producto = null, $compra_en_mostrador = null, $control_de_existencia = null, $costo_estandar = null, $costo_extra_almacen = null, $descripcion_producto = null, $empresas = null, $foto_del_producto = null, $garantia = null, $id_unidad = null, $id_unidad_compra = null, $impuestos = null, $metodo_costeo = null, $nombre_producto = null, $peso_producto = null, $precio = null, $visible_en_vc = null) { Logger::log("== Editando producto " . $id_producto . " =="); //se validan los parametros recibidos $validar = self::validarParametrosProducto($id_producto, $compra_en_mostrador, $metodo_costeo, null, $codigo_producto, $nombre_producto, $garantia, $costo_estandar, $control_de_existencia, $descripcion_producto, $foto_del_producto, $costo_extra_almacen, $codigo_de_barras, $peso_producto, $id_unidad, $precio); if (is_string($validar)) { Logger::error($validar); throw new Exception($validar); } //is_string($validar) $producto = ProductoDAO::getByPK($id_producto); //Los parametros que no sean nulos seran tomados como una actualizacion if (!is_null($compra_en_mostrador)) { $producto->setCompraEnMostrador($compra_en_mostrador); } //!is_null($compra_en_mostrador) if (!is_null($descripcion_producto)) { $producto->setDescripcion($descripcion_producto); } //!is_null($descripcion_producto) if (!is_null($metodo_costeo)) { $producto->setMetodoCosteo($metodo_costeo); } //!is_null($metodo_costeo) if (!is_null($codigo_producto)) { $producto->setCodigoProducto(trim($codigo_producto)); } //!is_null($codigo_producto) if (!is_null($nombre_producto)) { $producto->setNombreProducto(trim($nombre_producto)); } //!is_null($nombre_producto) if (!is_null($garantia)) { $producto->setGarantia($garantia); } //!is_null($garantia) if (!is_null($costo_estandar)) { $costo_estandar = $metodo_costeo == "costo" ? $costo_estandar : null; //sólo en caso de que se haya seleccionado metodo_costeo == 'costo' tomar en cuenta este valor ver API $producto->setCostoEstandar($costo_estandar); } //!is_null($costo_estandar) if (!is_null($control_de_existencia)) { $producto->setControlDeExistencia($control_de_existencia); } //!is_null($control_de_existencia) if (!is_null($foto_del_producto)) { $producto->setFotoDelProducto($foto_del_producto); } //!is_null($foto_del_producto) if (!is_null($costo_extra_almacen)) { $producto->setCostoExtraAlmacen($costo_extra_almacen); } //!is_null($costo_extra_almacen) if (!is_null($codigo_de_barras)) { $producto->setCodigoDeBarras(trim($codigo_de_barras)); } //!is_null($codigo_de_barras) if (!is_null($peso_producto)) { $producto->setPesoProducto($peso_producto); } //!is_null($peso_producto) if (!is_null($id_unidad)) { $producto->setIdUnidad($id_unidad); } //!is_null($id_unidad) if (!is_null($id_unidad_compra)) { $producto->setIdUnidadCompra($id_unidad_compra); } //!is_null($id_unidad_compra) if (!is_null($precio)) { $producto->setPrecio($precio); } //!is_null($precio) if (!is_null($visible_en_vc)) { $producto->setVisibleEnVc($visible_en_vc); } if ($metodo_costeo == "precio" && is_null($producto->getPrecio())) { Logger::error("Se intenta registrar un producto con metodo de costeo precio sin especificar un precio"); throw new Exception("Se intenta registrar un producto con metodo de costeo precio sin especificar un precio", 901); } else { if ($metodo_costeo == "costo" && is_null($producto->getCostoEstandar())) { Logger::error("Se intenta registrar un producto con metodo de costeo costo sin especificar un costo estandar"); throw new Exception("Se intenta registrar un producto con metodo de costeo costo sin especificar un costo estandar", 901); } } //$metodo_costeo == "costo" && is_null($producto->getCostoEstandar()) DAO::transBegin(); try { ProductoDAO::save($producto); //Si se reciben empresas, clasificaciones y/o impuestos se modifican en sus respectivas tablas // //Primero se guardan o actualizan los registros pasados en la lista, despues se recorren los registros //actuales y si alguno no se encuentra en la lista se elimina. if (!is_null($empresas)) { $empresas = object_to_array($empresas); if (!is_array($empresas)) { throw new Exception("Las empresas fueron enviadas incorrectamente", 901); } //!is_array($empresas) $producto_empresa = new ProductoEmpresa(array("id_producto" => $id_producto)); foreach ($empresas as $empresa) { $validar = self::validarParametrosProductoEmpresa($empresa); if (is_string($validar)) { throw new Exception($validar, 901); } $producto_empresa->setIdEmpresa($empresa); ProductoEmpresaDAO::save($producto_empresa); } //$empresas as $empresa $productos_empresa = ProductoEmpresaDAO::search(new ProductoEmpresa(array("id_producto" => $id_producto))); foreach ($productos_empresa as $p_e) { $encontrado = false; foreach ($empresas as $empresa) { if ($empresa == $p_e->getIdEmpresa()) { $encontrado = true; } //$empresa == $p_e->getIdEmpresa() } //$empresas as $empresa if (!$encontrado) { ProductoEmpresaDAO::delete($p_e); } } //$productos_empresa as $p_e } //!is_null($empresas) /* Fin if de empresas */ if (!is_null($clasificaciones)) { $clasificaciones = object_to_array($clasificaciones); if (!is_array($clasificaciones)) { throw new Exception("Las clasificaciones fueron recibidas incorrectamente", 901); } //!is_array($clasificaciones) $producto_clasificacion = new ProductoClasificacion(array("id_producto" => $id_producto)); foreach ($clasificaciones as $clasificacion) { $c = ClasificacionProductoDAO::getByPK($clasificacion); if (is_null($c)) { throw new Exception("La clasificacion de producto con id " . $clasificacion . " no existe", 901); } if (!$c->getActiva()) { throw new Exception("La clasificaicon de producto con id " . $clasificacion . " no esta activa", 901); } $producto_clasificacion->setIdClasificacionProducto($clasificacion); ProductoClasificacionDAO::save($producto_clasificacion); } //$clasificaciones as $clasificacion $productos_clasificacion = ProductoClasificacionDAO::search(new ProductoClasificacion(array("id_producto" => $id_producto))); foreach ($productos_clasificacion as $p_c) { $encontrado = false; foreach ($clasificaciones as $clasificacion) { if ($clasificacion == $p_c->getIdClasificacionProducto()) { $encontrado = true; } //$clasificacion == $p_c->getIdClasificacionProducto() } //$clasificaciones as $clasificacion if (!$encontrado) { ProductoClasificacionDAO::delete($p_c); } } //$productos_clasificacion as $p_c } //!is_null($clasificaciones) /* Fin if de clasificaciones */ if (!is_null($impuestos)) { $impuestos = object_to_array($impuestos); if (!is_array($impuestos)) { throw new Exception("Los impuestos fueron recibidos incorrectamente", 901); } //!is_array($impuestos) $impuesto_producto = new ImpuestoProducto(array("id_producto" => $producto->getIdProducto())); foreach ($impuestos as $impuesto) { if (is_null(ImpuestoDAO::getByPK($impuesto))) { throw new Exception("El impuesto con id " . $impuesto . " no existe", 901); } $impuesto_producto->setIdImpuesto($impuesto); ImpuestoProductoDAO::save($impuesto_producto); } //$impuestos as $impuesto $impuestos_producto = ImpuestoProductoDAO::search(new ImpuestoProducto(array("id_producto" => $id_producto))); foreach ($impuestos_producto as $i_p) { $encontrado = false; foreach ($impuestos as $impuesto) { if ($impuesto == $i_p->getIdImpuesto()) { $encontrado = true; } //$impuesto == $i_p->getIdImpuesto() } //$impuestos as $impuesto if (!$encontrado) { ImpuestoProductoDAO::delete($i_p); } } //$impuestos_producto as $i_p } //!is_null($impuestos) /* Fin if de impuestos */ } catch (Exception $e) { DAO::transRollback(); Logger::error("El producto no pudo ser editado: " . $e); if ($e->getCode() == 901) { throw new Exception("El producto no pudo ser editado: " . $e->getMessage(), 901); } throw new Exception("El producto no pudo ser editado", 901); } DAO::transEnd(); Logger::log("Producto editado exitosamente"); }
/** * *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"); }