Example #1
0
function renderRow($unixTime, $fullArray)
{
    $out = "";
    switch ($fullArray["tipo"]) {
        case "SeguimientoDeServicio":
            $ods = OrdenDeServicioDAO::getByPK($fullArray["id_orden_de_servicio"]);
            $s = ServicioDAO::getByPK($ods->getIdServicio());
            $out .= '<strong> Seguimiento De Orden ' . $s->getNombreServicio() . ' ' . $fullArray["id_orden_de_servicio"] . ' </strong>';
            $out .= $fullArray["estado"];
            $u = $fullArray["id_usuario"];
            break;
        case "ClienteSeguimiento":
            $out .= '<strong> Seguimiento </strong>';
            $out .= $fullArray["texto"];
            $u = $fullArray["id_usuario"];
            break;
        case "OrdenDeServicio":
            $ods = OrdenDeServicioDAO::getByPK($fullArray["id_orden_de_servicio"]);
            $s = ServicioDAO::getByPK($ods->getIdServicio());
            $out .= '<strong>Nueva Orden de Servicio</strong> ' . $s->getNombreServicio() . ' ' . $fullArray["id_orden_de_servicio"] . ' ';
            $out .= $fullArray["descripcion"];
            $u = $fullArray["id_usuario"];
            break;
        case "Venta":
            if ($fullArray["cancelada"]) {
                $out .= '<strong><strike>Venta Cancelada ' . $fullArray["id_venta"] . '</strike></strong>';
            } else {
                $out .= '<strong>Venta ' . $fullArray["id_venta"] . '</strong>';
            }
            $out .= '&nbsp;' . FormatMoney($fullArray["total"]) . ' ' . $fullArray["tipo_de_venta"];
            $u = $fullArray["id_usuario"];
            break;
        case "Cotizacion":
            $out .= '<strong>Venta ' . $fullArray["id_venta"] . '</strong>';
            $u = $fullArray["id_usuario"];
            break;
    }
    //return json_encode( $fullVo );
    $u = UsuarioDAO::getByPK($u)->getNombre();
    $out .= '<br><div style="text-align: right; font-size:10px; color:gray">' . FormatTime($fullArray["fecha"]) . ' por ' . $u . "</div>";
    return $out;
}
 public static function OrdenDeServicio($id_orden)
 {
     //obtengamos datos de esta orden de servicio
     //el cliente
     $daoOrden = OrdenDeServicioDAO::getByPK($id_orden);
     $daoCliente = UsuarioDAO::getByPK($daoOrden->getIdUsuarioVenta());
     $daoAgente = UsuarioDAO::getByPK($daoOrden->getIdUsuario());
     $daoServicio = ServicioDAO::getByPK($daoOrden->getIdServicio());
     $pdf = self::createPdf("Orden de Servicio " . $id_orden, $daoServicio->getNombreServicio());
     self::printClient($pdf, $daoCliente);
     $opciones_tabla = array();
     $opciones_tabla['showLines'] = 0;
     $opciones_tabla['showHeadings'] = 0;
     $opciones_tabla['shaded'] = 0;
     $opciones_tabla['fontSize'] = 8;
     $opciones_tabla['xOrientation'] = 'right';
     $opciones_tabla['xPos'] = self::puntos_cm(7.5);
     $opciones_tabla['width'] = self::puntos_cm(11);
     $opciones_tabla['textCol'] = array(0, 0, 0);
     $opciones_tabla['titleFontSize'] = 12;
     $opciones_tabla['rowGap'] = 3;
     $opciones_tabla['colGap'] = 3;
     $datos = array(array("col" => "<b>Servicio</b>"), array("col" => $daoServicio->getCodigoServicio()), array("col" => "<b>Numero de orden</b>"), array("col" => $daoOrden->getIdOrdenDeServicio()), array("col" => "<b>Fecha de entrega</b>"), array("col" => ""));
     $pdf->ezSetY(self::puntos_cm(26.8));
     $opciones_tabla['xPos'] = self::puntos_cm(14.2);
     $opciones_tabla['width'] = self::puntos_cm(4);
     $opciones_tabla['showLines'] = 0;
     $opciones_tabla['shaded'] = 2;
     $opciones_tabla['shadeCol'] = array(1, 1, 1);
     $opciones_tabla['shadeCol2'] = array(0.8984375, 0.95703125, 0.99609375);
     $pdf->ezTable($datos, "", "", $opciones_tabla);
     /* ************************
      * PRODUCTOS
      * ************************* */
     $elementos = array(array('cantidad' => 'Detalles de la orden', 'unidad' => ''));
     $eP = $daoOrden->getExtraParams();
     if (!is_null($eP)) {
         $ePObj = json_decode($eP);
         foreach ($ePObj as $obj) {
             $row["cantidad"] = "<b>" . $obj->desc . "</b>";
             $row["unidad"] = $obj->value;
             $row["agrupacion"] = "";
             $row["descripcion"] = "";
             $row["precio"] = "";
             $row["importe"] = "";
             array_push($elementos, $row);
         }
     }
     $pdf->ezText("", 10, array('justification' => 'center'));
     $pdf->ezSetY(self::puntos_cm(18.6));
     $opciones_tabla['xPos'] = self::puntos_cm(2);
     $opciones_tabla['width'] = self::puntos_cm(16.2);
     $pdf->ezTable($elementos, "", "", $opciones_tabla);
     self::drawBasicGuide($pdf);
     $pdf->ezStream();
     return;
 }
Example #3
0
<?php

if (!class_exists("PHPUnit_Runner_Version")) {
    define("BYPASS_INSTANCE_CHECK", false);
    require_once "../../../server/bootstrap.php";
}
$page = new ClienteComponentPage("Bienvendio a POS ERP");
$banner = new BannerComponent("POS ERP", "Bienvenido a POS ERP <br>un sistema de gestion empresarial", "../../../media/EAbydW1M_XR.png");
$page->addComponent($banner);
//buscar si tiene ordenes de servico a su nombre
$sesion_actual = SesionController::Actual();
$ordenes_array = new OrdenDeServicio(array("id_usuario_venta" => $sesion_actual["id_usuario"]));
$ordenes = OrdenDeServicioDAO::search($ordenes_array);
if (sizeof($ordenes) > 0) {
    $page->addComponent(new TitleComponent("Sus ordenes de servicio", 2));
    $table = new TableComponent(array("id_servicio" => "Servicio", "fecha_orden" => "Fecha"), $ordenes);
    function renderIdServicio($id)
    {
        $serv = ServicioDAO::getByPK($id);
        return $serv->getNombreServicio();
    }
    $table->addColRender("fecha_orden", "FormatTime");
    $table->addOnClick("id_orden_de_servicio", "(function(a){ window.location = 'servicios.detalle.orden.php?oid='+a; })");
    $table->addColRender("id_servicio", "renderIdServicio");
    $page->addComponent($table);
}
$page->render();
Example #4
0
function funcion_orden_de_servicio($id_orden_de_servicio)
{
    return OrdenDeServicioDAO::getByPK($id_orden_de_servicio) ? ServicioDAO::getByPK(OrdenDeServicioDAO::getByPK($id_orden_de_servicio)->getIdServicio())->getNombreServicio() : "---------";
}
 /**
  *
  *Este metodo desactiva un usuario, usese cuando un empleado ya no trabaje para usted. Que pasa cuando el usuario tiene cuentas abiertas o ventas a credito con saldo.
  *
  * @param id_usuario int Id del usuario a eliminar
  **/
 public static function EliminarUsuario($id_usuario)
 {
     Logger::log("Eliminando usuario " . $id_usuario);
     //Se obtiene y se verifica que el usuario exista en la base de datos.
     $usuario = UsuarioDAO::getByPK($id_usuario);
     if (is_null($usuario)) {
         Logger::error("El usuario con id " . $id_usuario . " no existe");
         throw new Exception("El usuario no existe", 901);
     }
     //Si el usuario ya esta inactivo, no se le hacen cambios.
     if (!$usuario->getActivo()) {
         Logger::warn("El usuario con id: " . $id_usuario . " ya esta inactivo");
         throw new Exception("El usuario ya esta inactivo", 901);
     }
     //Si el saldo del ejercicio del usuario no es cero, siginifica que debe o que
     //se le debe, entonces no se puede eliminar.
     if ($usuario->getSaldoDelEjercicio() != 0) {
         Logger::error("El usuario con id: " . $id_usuario . " no tiene un saldo en ceros");
         throw new Exception("El usuario no tiene un saldo en ceros", 901);
     }
     //Si el usuario tiene una orden de servicio activa, no se puede eliminar
     $ordenes_de_servicio = OrdenDeServicioDAO::search(new OrdenDeServicio(array("id_usuario_venta" => $id_usuario)));
     foreach ($ordenes_de_servicio as $orden_de_servicio) {
         if ($orden_de_servicio->getActiva()) {
             Logger::error("El usuario " . $id_usuario . " no puede ser desactivado, tiene la orden " . $orden_de_servicio->getIdOrdenDeServicio() . " activa");
             throw new Exception("El usuario no puede ser desactivado pues aun cuenta con ordenes de servicio activas", 901);
         }
     }
     //Se cambia su estado activo a falso y se le asigna como hoy la fecha de baja.
     $usuario->setActivo(0);
     $usuario->setFechaBaja(time());
     DAO::transBegin();
     try {
         //Si el usuario era consignatario se desactiva como tal.
         if ($usuario->getConsignatario()) {
             ConsignacionesController::DesactivarConsignatario($id_usuario);
         }
         //Se actualiza el usuario
         UsuarioDAO::save($usuario);
         //Se eliminan los registros de la tabla permiso_usuario que contengan a este usuario
         $permisos_usuario = PermisoUsuarioDAO::search(new PermisoUsuario(array("id_usuario" => $id_usuario)));
         foreach ($permisos_usuario as $permiso_usuario) {
             PermisoUsuarioDAO::delete($permiso_usuario);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo eliminar el usuario: " . $e);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudo eliminar el usuario: " . $e->getMessage());
         }
         throw new Exception("No se pudo eliminar el usuario, consulte a su administrador de sistema", 901);
     }
     DAO::transEnd();
     Logger::log("Usuario eliminado exitosamente");
 }
<?php

define("BYPASS_INSTANCE_CHECK", false);
require_once "../../../server/bootstrap.php";
$page = new GerenciaComponentPage();
//
// Parametros necesarios
//
$page->requireParam("oid", "GET", "Esta orden de servicio no existe.");
$esta_orden = OrdenDeServicioDAO::getByPK($_GET["oid"]);
if (is_null($esta_orden)) {
    $page->addComponent(new TitleComponent("Ups", 2));
    $page->addComponent(new TitleComponent("La orden " . $_GET["oid"] . " no existe", 3));
    $page->render();
}
//
// Titulo de la pagina
//
$link = "<a href='servicios.detalle.orden.php?oid=" . $_GET["oid"] . "'>" . $_GET["oid"] . "</a>";
$page->addComponent(new TitleComponent("Seguimiento a la orden de servicio " . $link, 2));
//
// Forma de usuario
//
$form = new DAOFormComponent(new SeguimientoDeServicio(array("id_orden_de_servicio" => $_GET["oid"])));
$form->hideField(array("id_seguimiento_de_servicio", "id_usuario", "id_sucursal", "fecha_seguimiento"));
$form->makeObligatory(array("estado"));
$form->sendHidden("id_orden_de_servicio");
$form->addApiCall("api/servicios/orden/seguimiento/");
$form->onApiCallSuccessRedirect("servicios.detalle.orden.php?oid=" . $_GET["oid"]);
$form->renameField(array("estado" => "nota"));
//$form->createComboBoxJoinDistintName( "id_localizacion", "id_sucursal" , "razon_social", SucursalDAO::search(new Sucursal( array( "activa" => 1 ) )) );
 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;
 }
Example #8
0
        print '{"success":true, "sesion": false }';
        break;
    case 2004:
        //revisar login
        $token = SesionController::Iniciar($args["p"], $args["u"], true);
        echo json_encode(array("success" => $token["login_succesful"], "text" => "Credenciales invalidas"));
        break;
    case 2005:
        //dispatch
        $debug = isset($args['DEBUG']) ? "?debug" : "";
        echo "<script>window.location = 'sucursal.php" . $debug . "'; </script>";
        break;
    case 3000:
        $c = new stdClass();
        $c->servicios = array();
        foreach (ServicioDAO::getAll() as $servicio) {
            array_push($c->servicios, array("id_servicio" => $servicio->getIdServicio(), "nombre_servicio" => $servicio->getNombreServicio()));
        }
        echo json_encode($c);
        break;
    case 3001:
        $c = new stdClass();
        $c->ordenesActivas = array();
        foreach (OrdenDeServicioDAO::search(new OrdenDeServicio(array("activa" => 1))) as $servicio) {
            array_push($c->ordenesActivas, array("id_orden_de_servicio" => $servicio->getIdOrdenDeServicio(), "nombre_servicio" => ServicioDAO::getByPK($servicio->getIdServicio())->getNombreServicio(), "nombre_cliente" => UsuarioDAO::getByPK($servicio->getIdUsuarioVenta())->getNombre()));
        }
        echo json_encode($c);
        break;
        break;
}
return;
Example #9
0
    define("BYPASS_INSTANCE_CHECK", false);
    require_once "../../../server/bootstrap.php";
}
$page = new GerenciaComponentPage();
$page->partialRender();
?>
		<table>
			<tr>
				<td><img src="http://cdn1.iconfinder.com/data/icons/musthave/48/Stock%20Index%20Up.png"></td>
				<td><strong>Su configuracion esta incompleta.</strong><br>De una vuelta por la configuracion de Caffeina POS para importar sus clientes y productos.</td>
			</tr>

		</table>
	<?php 
$banner = new BannerComponent("POS ERP", "Bienvenido a POS ERP <br>un sistema de gestion empresarial", "../../media/EAbydW1M_XR.png");
$page->addComponent($banner);
/* *************************************************
 * Orden de Servicio Pendientes
 * ************************************************* */
$s = SesionController::Actual();
$ordenes_mias = OrdenDeServicioDAO::search(new OrdenDeServicio(array("id_usuario_asignado" => $s["id_usuario"], "activa" => true)));
switch (sizeof($ordenes_mias)) {
    case 0:
        break;
    case 1:
        $page->addComponent(new TitleComponent("Tienes 1 orden de servicio pendiente.", 3));
        break;
    default:
        $page->addComponent(new TitleComponent("Tienes " . sizeof($ordenes_mias) . " ordenes de servicio pendientes.", 3));
}
$page->render();
Example #10
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");
 }
 /**
  *
  * 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());
 }