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