public static function obtenerTarifasActuales($tipo_tarifa) { //Logger::log("Obteniendo tarifas de ".$tipo_tarifa); switch ($tipo_tarifa) { case "venta": case "compra": break; default: throw new Exception("`{$tipo_tarifa}` no es un tipo de tarifa valido."); } //Se obtienen todas las tarifas activas con su version activa, su version default, y la //fecha de inicio y de fin de la version activa. $sql = "select \r\n\t\t\t\t\t\tt.nombre, t.id_tarifa, t.id_version_activa, t.id_version_default, v.fecha_inicio, v.fecha_fin \r\n\t\t\t\t\tfrom \r\n\t\t\t\t\t\ttarifa t, version v \r\n\t\t\t\t\twhere \r\n\t\t\t\t\t\tt.activa = 1 and t.tipo_tarifa = ? and v.id_version = t.id_version_activa"; $val = array($tipo_tarifa); global $conn; $rs = $conn->Execute($sql, $val); $tarifas_versiones = array(); //Recorremos el resultado y guardamos el id de la version que se va a usar, si la version activa //ya caduco o aun no se activa entonces se toma la default. foreach ($rs as $result) { $tarifa_version = array(); $tarifa_version["id_tarifa"] = $result["id_tarifa"]; $tarifa_version["nombre"] = $result["nombre"]; //Si la fecha de inicio o la fecha de fin es nula, entonces se da por hecho que la version //no caduca y se selecciona. if (is_null($result["fecha_inicio"]) || is_null($result["fecha_fin"])) { $tarifa_version["id_version"] = $result["id_version_activa"]; array_push($tarifas_versiones, $tarifa_version); continue; } $fecha_inicio = strtotime($result["fecha_inicio"]); $fecha_fin = strtotime($result["fecha_fin"]); $now = time(); if ($fecha_inicio > $now && $now < $fecha_fin) { $tarifa_version["id_version"] = $result["id_version_activa"]; } else { $tarifa_version["id_version"] = $result["id_version_default"]; } array_push($tarifas_versiones, $tarifa_version); } //Una vez que tenemos los ids de las tarifas y de las versiones, traemos //todas las reglas de la version y las guardamos en el arreglo final $reglas = array(); foreach ($tarifas_versiones as $tarifa_version) { $regla = array(); $regla["id_tarifa"] = $tarifa_version["id_tarifa"]; $regla["reglas"] = ReglaDAO::search(new Regla(array("id_version" => $tarifa_version["id_version"])), "secuencia"); $regla["nombre"] = $tarifa_version["nombre"]; array_push($reglas, $regla); } //Logger::log("Se obtuvieron ".count($reglas)." tarifas con sus respectivas reglas"); return $reglas; }
/** * *Edita la informacion de una tarifa. Este metodo puede cambiar las formulas de una tarifa o la vigencia de la misma. Este metodo tambien puede ponder como default esta tarifa o quitarle el default. Si se le quita el default, automaticamente se pone como default la predeterminada del sistema. Si se obtienen formulas en este metodo, se borraran todas las formulas de esta tarifa y se aplicaran las recibidas Si se cambia el tipo de tarifa, se verfica que esta tarifa no sea una default para algun rol, usuario, clasificacion de cliente o de proveedor, y pierde su default si fuera la default, poniendo como default la predetermianda del sistema. Aplican todas las consideraciones de la documentacion del metodo nuevaTarifa * * @param id_tarifa int Id de la tarifa a editar * @param default bool Si esta tarifa sera la default * @param fecha_fin string Fecha a partir de la cual se dejaran de aplicar las formulas de esta tarifa * @param fecha_inicio string Fecha a partir de la cual se aplicaran las formulas de esta tarifa * @param formulas json Un arreglo de objetos que contendran la siguiente informacion: "formulas" : [ { "id_producto" : null, "id_unidad" : null, "id_clasificacion_producto" : null, "id_servicio" : null, "id_paquete" : null, "id_clasificacion_servicio" : null, "cantidad_minima" : null, "id_tarifa" : -1, "porcentaje_utilidad" : 0.00, "utilidad_neta" : 0.00, "metodo_redondeo" : 0.00, "margen_min" : 0.00, "margen_max" : 0.00, "secuencia" : 5 } ] Para mas informacion de estos parametros consulte la documentacion del metodo nuevaTarifa. El parametro id_tarifa es la tarifa base de donde se sacara el Precio Base para la formula. La tarifa -1 inidica que no hay una tarifa base, sino que se toma el precio base del producto, o su costo base, segun marque su metodo de costeo. * @param id_moneda int Id de la moneda con la cual se realizaran todos los movimientos de la tarifa * @param nombre string Nombre de la tarifa * @param tipo_tarifa string Puede ser "compra" o "venta" e indica si la tarifa sera de compra o de venta **/ public static function Editar($id_tarifa, $default = null, $fecha_fin = null, $fecha_inicio = null, $formulas = null, $id_moneda = null, $nombre = null, $tipo_tarifa = null) { Logger::log("Editando la tarifa " . $id_tarifa . " desde metodo publico"); //Se llama a los metodos internos, pues ellos hacen las validaciones DAO::transBegin(); try { self::EditarTarifaBase($id_tarifa, $id_moneda, $nombre, $tipo_tarifa); $tarifa = TarifaDAO::getByPK($id_tarifa); if ($default && !$tarifa->getDefault()) { switch ($tarifa->getTipoTarifa()) { case "compra": self::CompraSetDefaultTarifa($id_tarifa); break; case "venta": self::VentaSetDefaultTarifa($id_tarifa); break; } } //Si la version activa de la tarifa es la version default con reglas puestas por el usuario, //y al editarse se le quiere poner fecha de inicio o de fin, entonces se tiene que crear //otra version default que no tenga caducidad y con una regla que no haga ningun cambio a los precios if ($tarifa->getIdVersionActiva() == $tarifa->getIdVersionDefault() && (!is_null($fecha_inicio) || !is_null($fecha_fin))) { $id_version_default = self::NuevaVersion($id_tarifa, $tarifa->getNombre() . " vd", 0, 1); $id_regla_default = self::NuevaRegla($id_version_default, $tarifa->getNombre() . " vd rd", 1, 1, null, null, null, null, null, -1, null, 0, 0, 0, 0, 0); $tarifa->setIdVersionDefault($id_version_default); TarifaDAO::save($tarifa); } self::EditarVersion($tarifa->getIdVersionActiva(), $fecha_fin, $fecha_inicio); //Si se reciben formulas, se eliminan todas las formlas en la version activa y se //insertan las formulas recibidas. if (!is_null($formulas)) { $id_version = $tarifa->getIdVersionActiva(); $nombre_version = VersionDAO::getByPK($id_version)->getNombre(); $contador = 0; $reglas = ReglaDAO::search(new Regla(array("id_version" => $id_version))); foreach ($reglas as $regla) { self::EliminarRegla($regla->getIdRegla()); } foreach ($formulas as $formula) { if (!array_key_exists("secuencia", $formula)) { throw new Exception("La formula recibida no cuenta con el parametro secuencia", 901); } self::NuevaRegla($id_version, $nombre_version . " r" . $contador, $formula["secuencia"], array_key_exists("cantidad_minima", $formula) ? $formula["cantidad_minima"] : 1, array_key_exists("id_clasificacion_producto", $formula) ? $formula["id_clasificacion_producto"] : null, array_key_exists("id_clasificacion_servicio", $formula) ? $formula["id_clasificacion_servicio"] : null, array_key_exists("id_paquete", $formula) ? $formula["id_paquete"] : null, array_key_exists("id_producto", $formula) ? $formula["id_producto"] : null, array_key_exists("id_servicio", $formula) ? $formula["id_servicio"] : null, array_key_exists("id_tarifa", $formula) ? $formula["id_tarifa"] : null, array_key_exists("id_unidad", $formula) ? $formula["id_unidad"] : null, array_key_exists("margen_max", $formula) ? $formula["margen_max"] : 0, array_key_exists("margen_min", $formula) ? $formula["margen_min"] : 0, array_key_exists("metodo_redondeo", $formula) ? $formula["metodo_redondeo"] : 0, array_key_exists("porcentaje_utilidad", $formula) ? $formula["porcentaje_utilidad"] : 0, array_key_exists("utilidad_neta", $formula) ? $formula["utilidad_neta"] : 0); $contador++; } } } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo editar la tarifa: " . $e); if ($e->getCode() == 901) { throw new Exception("No se pudo editar la tarifa: " . $e->getMessage(), 901); } throw new Exception("No se pudo editar la tarifa, intentelo de nuevo mas tarde o consulte a su administrador de sistema", 901); } DAO::transEnd(); Logger::log("Tarifa editada exitosamente"); }
?> <div id ="content_table_rules"> <table name ="table_reglas" id ="table_reglas" style ="width:100%; margin-top: 10px;"> <tr> <th> Secuencia </th> <th> Nombre </th> <th> Producto </th> <th> Categoría </th> <th> Servicio </th> <th> Cant Min </th> </tr> <?php $html = ""; $reglas = ReglaDAO::search(new Regla(array("id_version" => $version->getIdVersion()))); foreach ($reglas as $regla) { $html .= "<tr>"; $html .= " <td>"; $html .= " {$regla->getSecuencia()}"; $html .= " </td>"; $html .= " <td>"; $html .= " {$regla->getNombre()}"; $html .= " </td>"; $html .= " <td>"; if ($producto = ProductoDAO::getByPK($regla->getIdProducto())) { $html .= " " . $producto->getNombreProducto(); } else { $html .= "-"; } $html .= " </td>";