Ejemplo n.º 1
0
 /**
  *
  *En algunos servicios, se realiza la venta de productos de manera indirecta, por lo que se tiene que agregar a la orden de servicio.
  *
  * @param id_orden_de_servicio int Id de la orden de servicio a la cual se le agregaran los productos
  * @param productos json Arreglo de objetos con ids de producto, de unidad, sus cantidades, su precio, su impuesto, retencion y descuento.
  **/
 static function ProductosAgregarOrden($id_orden_de_servicio, $productos)
 {
     Logger::log("Agregando productos a la orden de servicio " . $id_orden_de_servicio);
     //Se valida la orden de servicio
     $validar = self::validarParametrosOrdenDeServicio($id_orden_de_servicio);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new Exception($validar, 901);
     }
     //valida que los productos sean validos
     $productos = object_to_array($productos);
     if (!is_array($productos)) {
         throw new Exception("Los productos son invalidos", 901);
     }
     //El precio de la orden de servicio se incrementara por cada precio encontrado en los productos
     $orden_de_servicio = OrdenDeServicioDAO::getByPK($id_orden_de_servicio);
     //Se almacenaran todos los productos obtenidos con us informacion
     $producto_orden_de_servicio = new ProductoOrdenDeServicio(array("id_orden_de_servicio" => $id_orden_de_servicio));
     DAO::transBegin();
     try {
         /*
          * Por cada producto en el arreglo, se busca en la tabla de productos orden,
          * pues puede ser que el usuario haya querido agregar mas producto al que ya habia.
          * 
          * Si no se encuentra en la tabla, simplemente se crea un nuevo registro
          */
         foreach ($productos as $producto) {
             if (!array_key_exists("id_producto", $producto) || !array_key_exists("id_unidad", $producto) || !array_key_exists("cantidad", $producto) || !array_key_exists("precio", $producto) || !array_key_exists("descuento", $producto) || !array_key_exists("impuesto", $producto) || !array_key_exists("retencion", $producto)) {
                 throw new Exception("Los productos no contienen los parametros necesarios", 901);
             }
             $producto_anterior = ProductoOrdenDeServicioDAO::getByPK($id_orden_de_servicio, $producto["id_producto"], $producto["id_unidad"]);
             if (!is_null($producto_anterior)) {
                 $producto_orden_de_servicio = $producto_anterior;
                 $cantidad_anterior = $producto_orden_de_servicio->getCantidad();
                 $producto_orden_de_servicio->setCantidad($cantidad_anterior + $producto["cantidad"]);
             } else {
                 $validar = self::validarParametrosProductoOrdenDeServicio($producto["id_producto"], $producto["precio"], $producto["cantidad"], $producto["descuento"], $producto["impuesto"], $producto["retencion"], $producto["id_unidad"]);
                 if (is_string($validar)) {
                     throw new Exception($validar, 901);
                 }
                 $producto_orden_de_servicio->setCantidad($producto["cantidad"]);
                 $producto_orden_de_servicio->setDescuento($producto["descuento"]);
                 $producto_orden_de_servicio->setIdProducto($producto["id_producto"]);
                 $producto_orden_de_servicio->setIdUnidad($producto["id_unidad"]);
                 $producto_orden_de_servicio->setImpuesto($producto["impuesto"]);
                 $producto_orden_de_servicio->setPrecio($producto["precio"]);
                 $producto_orden_de_servicio->setRetencion($producto["retencion"]);
             }
             //@TODO
             //La linea de codigo siguiente puede causar problemas, pues el precio de un producto puede cmabiar a lo largo del tiempo.
             //Si este metodo fue llamado para agregar mas cantidad a uno ya existente para esta orden en un rango de tiempo
             //donde el precio del producto cambio de la primera vez que fue agregado a esta, el precio registrado en la tabla
             //sera el de la primera vez, pero el producto agregado recientemente ya tiene otro precio.
             //
             //Si este producto es retirado con el metodo Quitar_productoOrden se tiene que pasar el precio que tenia este
             //producto a la hora de agregarlo para que el precio total de la orden de servicio no se vea alterada.
             //
             $orden_de_servicio->setPrecio($orden_de_servicio->getPrecio() + $producto["cantidad"] * $producto["precio"]);
             ProductoOrdenDeServicioDAO::save($producto_orden_de_servicio);
             OrdenDeServicioDAO::save($orden_de_servicio);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo agregar el producto a la orden: " . $e);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudo agregar el producto a la orden: " . $e->getMessage(), 901);
         }
         throw new Exception("No se pudo agregar el producto a la orden, consulte al administrador del sistema", 901);
     }
     DAO::transEnd();
     Logger::log("Producto agregado exitosamente");
 }
Ejemplo n.º 2
0
 /**
  *
  * Registrar un gasto. El usuario y la sucursal que lo registran ser?tomados de la sesi?ctual.
  * 
  * <br/><br/><b>Update :</b>Ademas deber?tambi?de tomar la fecha de ingreso del gasto del servidor y agregar tambi?como par?tro una fecha a la cual se deber?de aplicar el gasto. Por ejemplo si el d?09/09/11 (viernes) se tomo dinero para pagar la luz, pero resulta que ese d?se olvidaron de registrar el gasto y lo registran el 12/09/11 (lunes). Entonces tambien se deberia de tomar como parametro una <b>fecha</b> a la cual aplicar el gasto, tambien se deberia de enviar como parametro una <b>nota</b>
  *
  * @param fecha_gasto string Fecha del gasto
  * @param id_empresa int Id de la empresa a la que pertenece este gasto
  * @param billetes json Los billetes que se retiran de la caja por pagar este gasto
  * @param descripcion string Descripcion del gasto en caso de que no este contemplado en la lista de concpetos de gasto
  * @param folio string Folio de la factura del gasto
  * @param id_caja int Id de la caja de la que se sustrae el dinero para pagar el gasto
  * @param id_concepto_gasto int Id del concepto al que  hace referencia el gasto
  * @param id_orden_de_servicio int Id de la orden del servicio que genero este gasto
  * @param id_sucursal int Id de la sucursal a la que pertenece este gasto
  * @param monto float Monto del gasto en caso de que no este contemplado por el concepto de gasto o sea diferente a este
  * @param nota string Nota del gasto
  * @return id_gasto int Id generado por la insercin del nuevo gasto
  **/
 public static function NuevoGasto($fecha_gasto, $id_empresa, $billetes = null, $descripcion = null, $folio = null, $id_caja = null, $id_concepto_gasto = null, $id_orden_de_servicio = null, $id_sucursal = null, $monto = null, $nota = null)
 {
     //obtiene al usuario de la sesion actual
     $id_usuario = SesionController::Actual();
     $id_usuario = $id_usuario["id_usuario"];
     if (is_null($id_usuario)) {
         throw new Exception("No se pudo obtener el usuario de la sesion, ya inicio sesion?");
     }
     //Se validan los parametros
     $validar = self::validarParametrosGasto(null, $id_empresa, $id_concepto_gasto, $id_orden_de_servicio, $fecha_gasto, $id_sucursal, $id_caja, $nota, $descripcion, $folio, $monto);
     //Si no se recibio monto, se toma del concepto de gasto.
     //Si no se recibio concepto de gasto o este no cuenta con un monto se manda una excepcion
     if (is_null($monto)) {
         if (is_null($id_concepto_gasto)) {
             throw new Exception("No se recibio un concepto de gasto ni un monto");
         }
         $concepto_gasto = ConceptoGastoDAO::getByPK($id_concepto_gasto);
         if (is_null($concepto_gasto)) {
             throw new Exception("El concepto de gasto recibido no existe.");
         }
         $monto = $concepto_gasto->getMonto();
         if (is_null($monto)) {
             throw new Exception("El concepto de gasto recibido no cuenta con un monto ni se recibio un monto");
         }
     }
     //Si no se recibe sucursal ni caja se intenta tomar las actuales
     if (!$id_sucursal) {
         $id_sucursal = self::getSucursal();
     }
     if (!$id_caja) {
         $id_caja = self::getCaja();
     }
     if (!is_null($id_caja)) {
         try {
             CajasController::modificarCaja($id_caja, 0, $billetes, $monto);
         } catch (Exception $e) {
             throw $e;
         }
     }
     //Se inicializa el registro de gasto
     $gasto = new Gasto();
     // fecha_gasto might be in the format : 2012-10-21T00:00:00
     // if this is the case then act acordingly
     if (is_int($fecha_gasto)) {
         $gasto->setFechaDelGasto($fecha_gasto);
     } else {
         $gasto->setFechaDelGasto(strtotime($fecha_gasto));
     }
     $gasto->setIdEmpresa($id_empresa);
     $gasto->setMonto($monto);
     $gasto->setIdSucursal($id_sucursal);
     $gasto->setIdCaja($id_caja);
     $gasto->setIdOrdenDeServicio($id_orden_de_servicio);
     $gasto->setIdConceptoGasto($id_concepto_gasto);
     $gasto->setDescripcion($descripcion);
     $gasto->setFolio($folio);
     $gasto->setNota($nota);
     $gasto->setFechaDeRegistro(time());
     $gasto->setIdUsuario($id_usuario);
     $gasto->setCancelado(0);
     //Se incrementa el costo de la orden de servicio si este gasto se le asigna a alguna
     $orden_de_servicio = null;
     if (!is_null($id_orden_de_servicio)) {
         $orden_de_servicio = OrdenDeServicioDAO::getByPK($id_orden_de_servicio);
         $orden_de_servicio->setPrecio($monto + $orden_de_servicio->getPrecio());
     }
     DAO::transBegin();
     try {
         GastoDAO::save($gasto);
         if (!is_null($orden_de_servicio)) {
             OrdenDeServicioDAO::save($orden_de_servicio);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear el gasto: " . $e);
         throw new Exception("No se pudo crear el gasto");
     }
     DAO::transEnd();
     Logger::log("Gasto creado exitosamente");
     return array("id_gasto" => $gasto->getIdGasto());
 }