コード例 #1
0
function descripcion_sucursal($id_sucursal)
{
    if (!SucursalDAO::getByPK($id_sucursal)) {
        return "";
    }
    return "<font title = \"Ir a sucursal\" style = \"cursor:pointer;\" onClick = \"(function(){ window.location = 'sucursales.ver.php?sid={$id_sucursal}'; })();\" >" . SucursalDAO::getByPK($id_sucursal)->getRazonSocial() . "</font>";
}
コード例 #2
0
 public function testNuevoCorteSucursal()
 {
     $id = ScenarioMaker::CreateSucursalAndReturnID("N");
     EfectivoController::NuevoCorteSucursal(0, $id);
     //now, 'UltimoCorte' should not return null
     $this->assertNotNull(EfectivoController::UltimoCorte(SucursalDAO::getByPK($id)));
 }
コード例 #3
0
 /**
      *
      * Ver la lista de productos y sus existencias, se puede filtrar por empresa, sucursal, almac?n, y lote.
       Se puede ordenar por los atributos de producto.
      *
      * @param existencia_mayor_que float Se regresaran los productos cuya existencia sea mayor a la especificada por este valor
      * @param existencia_igual_que float Se regresaran los productos cuya existencia sea igual a la especificada por este valor
      * @param existencia_menor_que float Se regresaran los productos cuya existencia sea menor a la especificada por este valor
      * @param id_empresa int Id de la empresa de la cual se vern los productos.
      * @param id_sucursal int Id de la sucursal de la cual se vern los productos.
      * @param id_almacen	 int Id del almacen del cual se vern los productos.
      * @param activo	 bool Si es true, mostrar solo los productos que estn activos, si es false mostrar solo los productos que no lo sean.
      * @param id_lote int Id del lote del cual se veran los productos en existencia
      * @return existecias json Lista de existencias
      * */
 public static function Existencias($id_almacen = null, $id_empresa = null, $id_producto = null, $id_sucursal = null)
 {
     $e = AlmacenDAO::Existencias();
     return array("resultados" => $e, "numero_de_resultados" => sizeof($e));
     $daoProductos = ProductoDAO::getAll();
     $aOut = array();
     $daoAlmacenes = AlmacenDAO::getAll();
     for ($iProd = 0; $iProd < sizeof($daoProductos); $iProd++) {
         //por cada almacen
         for ($iAl = 0; $iAl < sizeof($daoAlmacenes); $iAl++) {
             //buscar sus lotes
         }
         array_push($aOut, $daoProductos[$iProd]->asArray());
     }
     return array("numero_de_resultados" => sizeof($aOut), "resultados" => $aOut);
     //Si se recibe un id producto, solo se listan las existencias de dicho producto, se puede combinar con
     //los demas parametros. Si no se recibe ningun otro, se realiza un acumulado de este producto en todos los almacenes.
     //
     //Si se recibe un id almacen, solo se listan las existencias de dicho almacen
     //
     //Si se recibe la variable id_empresa o id_sucursal, se listara un acumulado de todos los productos
     //con las cantidades de productos de los diferentes almacenes dentro de ella
     //
     //Cuando se recibe alguno de ellos, primero se consiguen todos los almacenes que le pertencen, despues
     //se consiguen todos los productos de cada almacen y se guardan en un arreglo temporal que despues es ordenado.
     //EL arreglo ordenado es el que se envia.
     //
     //Si no se recibe ningun parametro, se listaran todos los productos existentes en todos los almacenes
     $productos_almacenes = array();
     //Si solo se especifica un producto, se regresa un arreglo con las sucursales donde esta ese producto y
     //la cantidad total en cada una
     if (!is_null($id_producto) && is_null($id_almacen) && is_null($id_empresa) && is_null($id_sucursal)) {
         //Se obtienen todas las sucursales y se llama recursivamente a este metodo
         $sucursales = SucursalDAO::search(new Sucursal(array("activa" => 1)));
         $result = array();
         foreach ($sucursales as $sucursal) {
             $p_a = self::Existencias(null, null, $id_producto, $sucursal->getIdSucursal());
             if ($p_a["numero_de_resultados"] > 0) {
                 foreach ($p_a["resultados"] as $p) {
                     $result["id_sucursal"] = $sucursal->getIdSucursal();
                     $suc = SucursalDAO::getByPK($sucursal->getIdSucursal());
                     $result["nombre_sucursal"] = $suc->getDescripcion();
                     $result["id_producto"] = $p->getIdProducto();
                     $result["id_unidad"] = $p->getIdUnidad();
                     $result["cantidad"] = $p->getCantidad();
                     array_push($productos_almacenes, $result);
                 }
             }
         }
     } else {
         if (!is_null($id_almacen)) {
             //Se buscan los registros de productos que cumplan con el almacen y con el producto recibidos
             $productos_almacenes = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $id_almacen, "id_producto" => $id_producto)));
         } else {
             if (!is_null($id_empresa)) {
                 //Se obtienen todos los almacenes de la empresa
                 $almacenes_empresa = AlmacenDAO::search(new Almacen(array("id_empresa" => $id_empresa)));
                 $productos_almacenes_empresa = array();
                 //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que seacarlos
                 //de su arreglo y ponerlos en un arreglo general
                 foreach ($almacenes_empresa as $almacen_empresa) {
                     //Se obtiene el arreglo de productos
                     $productos_almacen_empresa = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen_empresa->getIdAlmacen(), "id_producto" => $id_producto)));
                     //Se vacía el arreglo en uno general
                     foreach ($productos_almacen_empresa as $producto_almacen_empresa) {
                         array_push($productos_almacenes_empresa, $producto_almacen_empresa);
                     }
                 }
                 //Se agrupan los productos iguales
                 $productos_almacenes = self::AgruparProductos($productos_almacenes_empresa);
             } else {
                 if (!is_null($id_sucursal)) {
                     //Se obtienen todos los almacenes de la sucursal
                     $almacenes_sucursal = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal)));
                     $productos_almacenes_sucursal = array();
                     //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que sacarlos
                     //de su arreglo y ponerlos en un arreglo general
                     foreach ($almacenes_sucursal as $almacen_sucursal) {
                         //Se obtiene el arreglo de productos
                         $productos_almacen_sucursal = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen_sucursal->getIdAlmacen(), "id_producto" => $id_producto)));
                         //Se vacía el arreglo en uno general
                         foreach ($productos_almacen_sucursal as $producto_almacen_sucursal) {
                             array_push($productos_almacenes_sucursal, $producto_almacen_sucursal);
                         }
                     }
                     //Se agrupan los productos iguales
                     $productos_almacenes = self::AgruparProductos($productos_almacenes_sucursal);
                 } else {
                     //Se obtienen todos los almacenes
                     $almacenes = AlmacenDAO::getAll();
                     $productos_almacen = array();
                     //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que sacarlos
                     //de su arreglo y ponerlos en un arreglo general
                     foreach ($almacenes as $almacen) {
                         //Se obtiene el arreglo de productos
                         $productos_a = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen->getIdAlmacen(), "id_producto" => $id_producto)));
                         //Se vacía el arreglo en uno general
                         foreach ($productos_a as $p_a) {
                             array_push($productos_almacen, $p_a);
                         }
                     }
                     //Se agrupan los productos iguales
                     $productos_almacenes = self::AgruparProductos($productos_almacen);
                 }
             }
         }
     }
     Logger::log("Se listan " . count($productos_almacenes) . " registros");
     $existencias = array("resultados" => $productos_almacenes, "numero_de_resultados" => count($productos_almacenes));
     return $existencias;
 }
コード例 #4
0
	          ['Alice', 'Mike', ''],
	          ['Bob', 'Jim', 'Bob Sponge'],
	          ['Carol', 'Bob', ''],
			  ['Carol2', 'Bob', '']	
			  */
			
				<?php 
$empresas = EmpresaDAO::getAll();
//iterar empresas
foreach ($empresas as $e) {
    echo "[ { v: '" . $e->getRazonSocial() . "', f: '<div>Empresa</div>" . $e->getRazonSocial() . "' } , '' ],\n ";
    //buscar sucursales de compui
    $id_sucursales = SucursalEmpresaDAO::search(new SucursalEmpresa(array("id_empresa" => $e->getIdEmpresa())));
    //iterear sucursales
    foreach ($id_sucursales as $id_s) {
        $s = SucursalDAO::getByPK($id_s->getIdSucursal());
        echo "/* sucursal, empresa */[  { v: '" . $s->getRazonSocial() . "', f: '<div>Sucursal</div>" . $s->getRazonSocial() . "' } , '" . $e->getRazonSocial() . "' ], \n";
        //iterar almacenes
        $almacenes = AlmacenDAO::search(new Almacen(array("id_almacen")));
        foreach ($almacenes as $a) {
            echo "/* almacen, sucursal */ [ { v: '" . $a->getNombre() . "', f: '<div>Almacen</div>" . $a->getNombre() . "' }, '" . $s->getRazonSocial() . "' ], \n";
            //lotes de esa sucursal
            $lotes = LoteDAO::search(new Lote(array("id_almacen" => $a->getIdAlmacen())));
            foreach ($lotes as $l) {
                echo "/* lote, almacen */[ { v: '" . $l->getFolio() . "', f: '<div>Lote</div>" . $l->getFolio() . "' }, '" . $a->getNombre() . "' ], \n";
            }
        }
        //for-each sucursales
    }
    //for-each id_sucursales
}
コード例 #5
0
 public static function validarParametrosUsuario($id_usuario = null, $id_direccion = null, $id_sucursal = null, $id_rol = null, $id_clasificacion_cliente = null, $id_clasificacion_proveedor = null, $id_moneda = null, $activo = null, $nombre = null, $rfc = null, $curp = null, $comision_ventas = null, $telefono_personal1 = null, $telefono_personal2 = null, $limite_credito = null, $descuento = null, $password = null, $salario = null, $correo_electronico = null, $pagina_web = null, $saldo_del_ejercicio = null, $ventas_a_credito = null, $representante_legal = null, $facturar_a_terceros = null, $dia_de_pago = null, $mensajeria = null, $intereses_moratorios = null, $denominacion_comercial = null, $dias_de_credito = null, $cuenta_de_mensajeria = null, $dia_de_revision = null, $codigo_usuario = null, $dias_de_embarque = null, $tiempo_entrega = null, $cuenta_bancaria = null, $id_tarifa_compra = null, $id_tarifa_venta = null, $id_usuario_padre = null)
 {
     //valida que el id del 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";
         }
     }
     //valida que el id de la direccion exista en la base de datos
     if (!is_null($id_direccion)) {
         if (is_null(DireccionDAO::getByPK($id_direccion))) {
             return "La direccion con id: " . $id_direccion . " no existe";
         }
     }
     //valida el id de la sucursal exista en la base de datos
     if (!is_null($id_sucursal)) {
         if (is_null(SucursalDAO::getByPK($id_sucursal))) {
             return "La sucursal con id: " . $id_sucursal . " no existe";
         }
     }
     //valida que el id del rol exista en la base de datos
     if (!is_null($id_rol)) {
         if (is_null(RolDAO::getByPK($id_rol))) {
             return "El rol con id: " . $id_rol . " no existe";
         }
     }
     //valida que la clasificacion del cliente exista en la base de datos
     if (!is_null($id_clasificacion_cliente)) {
         if (is_null(ClasificacionClienteDAO::getByPK($id_clasificacion_cliente))) {
             return "La clasificacion cliente con id: " . $id_clasificacion_cliente . " no existe";
         }
     }
     //valida que la clasificacion del proveedor exista en la base de datos
     if (!is_null($id_clasificacion_proveedor)) {
         if (is_null(ClasificacionProveedorDAO::getByPK($id_clasificacion_proveedor))) {
             return "La clasficiacion proveedor con id: " . $id_clasificacion_proveedor . " no existe";
         }
     }
     //valida que la moneda exista en la base de datos
     if (!is_null($id_moneda)) {
         Logger::log("Editando a moneda:" . $id_moneda);
         if (is_null(MonedaDAO::getByPK($id_moneda))) {
             return "La moneda con id: " . $id_moneda . " no existe";
         }
     }
     //valida el nombre
     if (!is_null($nombre)) {
         $e = ValidacionesController::validarLongitudDeCadena($nombre, 1, 100);
         if (!$e) {
             return "El numero de caracteres del nombre (" . $nombre . ") no esta entre 1 y 100";
         }
     }
     //valida el rfc, el rfc solo puede estar compuesto por Letras mayusculas y numeros
     if (!is_null($rfc)) {
         $e = ValidacionesController::validarLongitudDeCadena($rfc, 1, 30);
         if (!$e) {
             return "El numero de caracteres del rfc (" . $rfc . ") no esta entre 1 y 30";
         }
         if (preg_match('/[^A-Z0-9]/', $rfc)) {
             return "El rfc " . $rfc . " contiene caracteres fuera del rango A-Z y 0-9";
         }
     }
     //valida el curp, el curp solo puede tener letras mayusculas y numeros
     if (!is_null($curp)) {
         $e = ValidacionesController::validarLongitudDeCadena($curp, 1, 30);
         if (!$e) {
             return "El numero de caracteres de la curp (" . $curp . ") no esta entre 1 y 30";
         }
         if (preg_match('/[^A-Z0-9]/', $curp)) {
             return "El curp " . $curp . " contiene caracteres fuera del rango A-Z y 0-9";
         }
     }
     //valida la comision por ventas
     if (!is_null($comision_ventas)) {
         $e = ValidacionesController::validarNumero($comision_ventas, 0, 100);
         if (!$e) {
             return "La comision de ventas (" . $comision_ventas . ") no esta entre 0 y 100";
         }
     }
     //valida el telefono. Los telefonos solo pueden tener numeros, guiones,parentesis,asteriscos y espacios en blanco
     if (!is_null($telefono_personal1)) {
         $e = ValidacionesController::validarLongitudDeCadena($telefono_personal1, 1, 20);
         if (!$e) {
             return "El numero de caracteres del telefono personal (" . $telefono_personal1 . ") no esta entre 1 y 20";
         }
         if (preg_match('/[^0-9\\- \\(\\)\\*]/', $telefono_personal1)) {
             return "El telefono " . $telefono_personal1 . " tiene caracteres fuera del rango 0-9,-,(,),* o espacio vacío";
         }
     }
     //valida el telefono. Los telefonos solo pueden tener numeros, guiones,parentesis,asteriscos y espacios en blanco
     if (!is_null($telefono_personal2)) {
         $e = ValidacionesController::validarLongitudDeCadena($telefono_personal2, 1, 20);
         if (!$e) {
             return "El numero de caracteres del telefono personal alterno (" . $telefono_personal2 . ") no esta entre 1 y 20";
         }
         if (preg_match('/[^0-9\\- \\(\\)\\*]/', $telefono_personal2)) {
             return "El telefono " . $telefono_personal2 . " tiene caracteres fuera del rango 0-9,-,(,),* o espacio vacío";
         }
     }
     //valida el activo. Activo es una variable booleana.
     if (!is_null($activo)) {
         $e = ValidacionesController::validarEntero($activo, 0, 1);
         if (!$e) {
             return "La variable activo (" . $activo . ") no esta entre 0 y 1";
         }
     }
     //valida el limite de credito
     if (!is_null($limite_credito)) {
         $e = ValidacionesController::validarNumero($limite_credito, 0, 1.8E+200);
         if (!$e) {
             return "El limite de credito (" . $limite_credito . ") no esta entre 0 y 1.8e200";
         }
     }
     //valida el descuento. El descuento es un porcentaje y no puede ser mayor a 100
     if (!is_null($descuento)) {
         $e = ValidacionesController::validarNumero($descuento, 0, 100);
         if (!$e) {
             return "El descuento (" . $descuento . ") no esta entre 0 y 100";
         }
     }
     //valida el password, El pasword tiene que tener una longitud mayor o igual a 4
     if (!is_null($password)) {
         $e = ValidacionesController::validarLongitudDeCadena($password, 4, 32);
         if (!$e) {
             return "El numero de caracteres del password (" . $password . ") no esta entre 4 y 32";
         }
     }
     //valida el salario
     if (!is_null($salario)) {
         $e = ValidacionesController::validarNumero($salario, 0, 1.8E+200);
         if (!$e) {
             return "El salario (" . $salario . ") no esta entre 0 y 1.8e200";
         }
     }
     //valida el correo electronico segun las especificaciones de php
     if (!is_null($correo_electronico)) {
         $e = ValidacionesController::validarLongitudDeCadena($correo_electronico, 3, 30);
         if (!$e) {
             return "El numero de caracteres del correo electronico (" . $correo_electronico . ") no esta entre 3 y 30";
         }
         if (!is_string(filter_var($correo_electronico, FILTER_VALIDATE_EMAIL))) {
             return "El correo electronico " . $correo_electronico . " no es valido";
         }
     }
     //valida que una pagina web tenga un formato valido.
     if (!is_null($pagina_web)) {
         $e = ValidacionesController::validarLongitudDeCadena($pagina_web, 2, 30);
         if (!$e) {
             return $e;
         }
         if (!preg_match('/^(http|https|ftp):\\/\\/[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,6}' . '((:[0-9]{1,5})?\\/.*)?$/i', $pagina_web) && !preg_match('/^[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,6}' . '((:[0-9]{1,5})?\\/.*)?$/i', $pagina_web)) {
             return "La direccion web " . $pagina_web . " no cumple el formato valido";
         }
     }
     //valida el saldo del ejercicio
     if (!is_null($saldo_del_ejercicio)) {
         $e = ValidacionesController::validarNumero($saldo_del_ejercicio, -1.8E+200, 1.8E+200);
         if (!$e) {
             return "El saldo del ejercicio (" . $saldo_del_ejercicio . ") no esta entre -1.8e200 y 1.8e200";
         }
     }
     //valida las ventas a credito
     if (!is_null($ventas_a_credito)) {
         $e = ValidacionesController::validarEntero($ventas_a_credito, 0, PHP_INT_MAX);
         if (!$e) {
             return "Las venta a credito no estan entre 0 y " . PHP_INT_MAX;
         }
     }
     //valida el represnetante legal
     if (!is_null($representante_legal)) {
         $e = ValidacionesController::validarLongitudDeCadena($representante_legal, 0, 100);
         if (!$e) {
             return "El numero de caracteres del representante legal (" . $representante_legal . ") no esta entre 0 y 100";
         }
     }
     //valida la facturacion a terceros. Es un boleano
     if (!is_null($facturar_a_terceros)) {
         $e = ValidacionesController::validarEntero($facturar_a_terceros, 0, 1);
         if (!$e) {
             return "La variable facturar a terceros (" . $facturar_a_terceros . ") no esta entre 0 y 1";
         }
     }
     //valida los dias de pago
     if (!is_null($dia_de_pago)) {
         $e = ValidacionesController::validarLongitudDeCadena($dia_de_pago, 19, 19);
         if (!$e) {
             return "La fecha de dia de pago (" . $dia_de_pago . ") es invalida, el formato valido es YYYY-MM-dd HH:mm:ss";
         }
     }
     //valida el boleano mensajeria
     if (!is_null($mensajeria)) {
         $e = ValidacionesController::validarEntero($mensajeria, 0, 1);
         if (!$e) {
             return "La variable mensajeria (" . $mensajeria . ") no esta entre 0 y 1";
         }
     }
     //valida los intereses moratorios
     if (!is_null($intereses_moratorios)) {
         $e = ValidacionesController::validarNumero($intereses_moratorios, 0, 1.8E+200);
         if (!$e) {
             return "Los intereses moratorios (" . $intereses_moratorios . ") no estan entre 0 y 1.8e200";
         }
     }
     //valida la denominacion comercial
     if (!is_null($denominacion_comercial)) {
         $e = ValidacionesController::validarLongitudDeCadena($denominacion_comercial, 0, 100);
         if (!$e) {
             return "El numero de caracteres de la denominacion comercial (" . $denominacion_comercial . ") no esta entre 0 y 100";
         }
     }
     //valida los dias de credito
     if (!is_null($dias_de_credito)) {
         $e = ValidacionesController::validarEntero($dias_de_credito, 0, PHP_INT_MAX);
         if (!$e) {
             return "Los dias de credito (" . $dias_de_credito . ") no estan en el rango de 0 a " . PHP_INT_MAX;
         }
     }
     //valida la cuenta de mensajeria
     if (!is_null($cuenta_de_mensajeria)) {
         $e = ValidacionesController::validarLongitudDeCadena($cuenta_de_mensajeria, 0, 50);
         if (!$e) {
             return "El numero de caracteres de la cuenta de mensajeria (" . $cuenta_de_mensajeria . ") no etsa entre 0 y 50";
         }
     }
     //valida lso dias de revision
     if (!is_null($dia_de_revision)) {
         $e = ValidacionesController::validarLongitudDeCadena($dia_de_revision, 19, 19);
         if (!$e) {
             return "El dia de revision (" . $dia_de_revision . ") no tiene el formato apropiado, el formato valido es YYYY-MM-dd HH:mm:ss";
         }
     }
     //valida el codigo de usuario
     if (!is_null($codigo_usuario)) {
         $e = ValidacionesController::validarLongitudDeCadena($codigo_usuario, 1, 50);
         if (!$e) {
             return "El numero de caracteres del codigo de usuario no esta entre 1 y 50";
         }
         if (preg_match('/[^a-zA-Z0-9]/', $codigo_usuario)) {
             return "El codigo de usuario (" . $codigo_usuario . ") no tiene solo caracteres alfanumericos";
         }
     }
     //valida los dias de embarque
     if (!is_null($dias_de_embarque)) {
         $e = ValidacionesController::validarEntero($dias_de_embarque, 0, PHP_INT_MAX);
         if (!$e) {
             return "Los dias de embarque (" . $dias_de_embarque . ") no esta entre 0 y " . PHP_INT_MAX;
         }
     }
     //valida el tiempo de entrega
     if (!is_null($tiempo_entrega)) {
         $e = ValidacionesController::validarEntero($tiempo_entrega, 0, PHP_INT_MAX);
         if (!$e) {
             return "El tiempo de entrega (" . $tiempo_entrega . ") no esta entre 0 y " . PHP_INT_MAX;
         }
     }
     //valida la cuenta bancaria
     if (!is_null($cuenta_bancaria)) {
         $e = ValidacionesController::validarLongitudDeCadena($cuenta_bancaria, 0, 50);
         if (!$e) {
             return "El numero de caracteres de la cuenta bancaria (" . $cuenta_bancaria . ") no esta entre 0 y 50";
         }
     }
     //valida que la tarifa de compra sea valida
     if (!is_null($id_tarifa_compra)) {
         $tarifa = TarifaDAO::getByPK($id_tarifa_compra);
         if (is_null($tarifa)) {
             return "La tarifa " . $id_tarifa_compra . " no existe";
         }
         if (!$tarifa->getActiva()) {
             return "La tarifa " . $id_tarifa_compra . " no esta activa";
         }
         if ($tarifa->getTipoTarifa() != "compra") {
             return "La tarifa " . $id_tarifa_compra . " no es una tarifa de compra";
         }
     }
     //valida que la tarifa de venta sea valida
     if (!is_null($id_tarifa_venta)) {
         $tarifa = TarifaDAO::getByPK($id_tarifa_venta);
         if (is_null($tarifa)) {
             return "La tarifa " . $id_tarifa_venta . " no existe";
         }
         if (!$tarifa->getActiva()) {
             return "La tarifa " . $id_tarifa_venta . " no esta activa";
         }
         if ($tarifa->getTipoTarifa() != "venta") {
             return "La tarifa " . $id_tarifa_venta . " no es una tarifa de venta";
         }
     }
     //valida que el usuario padre exista y este activo
     if (!is_null($id_usuario_padre)) {
         $usuario_padre = UsuarioDAO::getByPK($id_usuario_padre);
         if (is_null($usuario_padre)) {
             return "El usuario padre " . $id_usuario_padre . " no existe";
         }
         if ($usuario_padre->getActivo()) {
             return "El usuario padre " . $usuario_padre->getNombre() . " no esta activo";
         }
     }
     return true;
 }
コード例 #6
0
ファイル: Ventas.controller.php プロジェクト: kailIII/pos-erp
 private static function Cotizar($descuento, $id_comprador_venta, $impuesto, $subtotal, $tipo_venta, $total, $datos_cheque = null, $detalle_orden = null, $detalle_paquete = null, $detalle_venta = null, $id_sucursal = null, $saldo = "0", $tipo_de_pago = null)
 {
     Logger::log("Cotizando ....");
     //Se obtiene el id del usuario actualmente logueado
     $aS = SesionController::Actual();
     $id_usuario = $aS["id_usuario"];
     //Se busca al usuario comprador
     $usuario = UsuarioDAO::getByPK($id_comprador_venta);
     if (!is_null($id_sucursal)) {
         $sucursal = SucursalDAO::getByPK($id_sucursal);
         if (is_null($sucursal)) {
             Logger::error("La sucursal " . $id_sucursal . " no existe");
             throw new InvalidDataException("La sucursal no existe", 901);
         }
         if (!$sucursal->getActiva()) {
             Logger::error("La sucursal " . $id_sucursal . " esta desactivada");
             throw new InvalidDataException("La sucursal esta desactivada", 901);
         }
     }
     //Se inicializa la venta con los parametros obtenidos
     $venta = new Venta();
     $venta->setRetencion(0);
     $venta->setEsCotizacion(true);
     $venta->setIdCompradorVenta($id_comprador_venta);
     $venta->setSubtotal($subtotal);
     $venta->setImpuesto($impuesto);
     $venta->setTotal($total);
     $venta->setDescuento($descuento);
     $venta->setTipoDeVenta($tipo_venta);
     $venta->setIdCaja(null);
     $venta->setIdSucursal($id_sucursal);
     $venta->setIdUsuario($id_usuario);
     $venta->setIdVentaCaja(NULL);
     $venta->setCancelada(0);
     $venta->setTipoDePago(null);
     $venta->setSaldo(0);
     $venta->setFecha(time());
     DAO::transBegin();
     try {
         VentaDAO::save($venta);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo realizar la venta: " . $e);
         throw new Exception("No se pudo realizar la venta", 901);
     }
     //Si el detalle de las ordenes compradas, el detalle de los paquetes y el detalle de los productos
     //son nulos, manda error.
     if (is_null($detalle_orden) && is_null($detalle_paquete) && is_null($detalle_venta)) {
         throw new InvalidDataException("No se recibieron ni paquetes ni productos ni servicios para esta venta", 901);
     }
     //Por cada detalle, se valida la informacion recibida, se guarda en un registro
     //que contiene el id de la venta generada y se guarda el detalle en su respectiva tabla.
     if (!is_null($detalle_venta)) {
         $detalle_producto = object_to_array($detalle_venta);
         if (!is_array($detalle_producto)) {
             throw new Exception("El detalle del producto es invalido", 901);
         }
         foreach ($detalle_producto as $d_p) {
             $d_producto = new VentaProducto();
             $d_producto->setIdVenta($venta->getIdVenta());
             if (!array_key_exists("id_producto", $d_p) || !array_key_exists("cantidad", $d_p) || !array_key_exists("precio", $d_p) || !array_key_exists("descuento", $d_p) || !array_key_exists("impuesto", $d_p) || !array_key_exists("retencion", $d_p) || !array_key_exists("id_unidad", $d_p)) {
                 throw new Exception("El detalle del producto es invalido", 901);
             }
             Logger::log("Insertando venta_producto:");
             $d_producto->setCantidad($d_p["cantidad"]);
             $d_producto->setDescuento($d_p["descuento"]);
             $d_producto->setIdProducto($d_p["id_producto"]);
             $d_producto->setIdUnidad($d_p["id_unidad"]);
             $d_producto->setImpuesto($d_p["impuesto"]);
             $d_producto->setPrecio($d_p["precio"]);
             $d_producto->setRetencion($d_p["retencion"]);
             Logger::log($d_producto);
             try {
                 VentaProductoDAO::save($d_producto);
             } catch (Exception $e) {
                 DAO::transRollback();
                 Logger::error("No se pudo realizar la venta: " . $e);
                 throw new Exception("No se pudo realizar la venta", 901);
             }
         }
     }
     /* Fin de if para detalle_producto */
     DAO::transEnd();
     Logger::log("====== Cotizacion realizada exitosamente ======== ");
     return array("id_venta" => $venta->getIdVenta());
 }
コード例 #7
0
 private static function cancelarAbonoPrestamo(AbonoPrestamo $abono, $id_caja, $billetes)
 {
     $prestamo = PrestamoDAO::getByPK($abono->getIdPrestamo());
     if (is_null($prestamo)) {
         Logger::error("FATAL!!!! Este abono apunta a un prestamo que no existe!!");
         throw new Exception("FATAL!!!! Este abono apunta a un prestamo que no existe!!");
     }
     //
     //Los solicitantes pueden ser positivos o negativos.
     //Si son positivos, son usuarios, si son negativos, son sucursales.
     //
     //Cuando un usuario cancela su abono a un prestamo, se incrementa su deuda.
     //
     //Cuando una sucursal cancela su abono, solo se afecta el prestamo, pues
     //la cuenta de la sucursal se calcula a partir de todos sus movimientos
     //y es en el prestamo donde se vera reflejado el cambio.
     //
     $id_solicitante = $prestamo->getIdSolicitante();
     if ($id_solicitante > 0) {
         $solicitante = UsuarioDAO::getByPK($id_solicitante);
     } else {
         $solicitante = SucursalDAO::getByPK($id_solicitante * -1);
     }
     if (is_null($solicitante)) {
         Logger::error("FATAL!!!! El prestamo de este abono no tiene un solicitante");
         throw new Exception("FATAL!!!! El prestamo de este abono no tiene un solicitante");
     }
     $monto = $abono->getMonto();
     if ($id_solicitante > 0) {
         $solicitante->setSaldoDelEjercicio($solicitante->getSaldoDelEjercicio() - $monto);
     }
     $prestamo->setSaldo($prestamo->getSaldo() - $monto);
     //
     //Un Prestamo no puede ser cancelado, solo liquidado.
     //
     //Si no hay una caja, se tomara el dinero como ganado.
     //
     if (!is_null($id_caja)) {
         try {
             CajasController::modificarCaja($id_caja, 0, $billetes, $monto);
         } catch (Exception $e) {
             throw $e;
         }
     }
     try {
         self::eliminarCheques($abono->getIdAbonoPrestamo(), null, null, 1);
     } catch (Exception $e) {
         throw $e;
     }
     //
     //Si no ha ocurrido ningun error con los billetes o con la caja, actualizas
     //al usuario y a la compra
     //
     DAO::transBegin();
     try {
         if ($id_solicitante > 0) {
             UsuarioDAO::save($solicitante);
         }
         PrestamoDAO::save($prestamo);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se ha podido actualizar al usuario ni al prestamo: " . $e);
         throw new Exception("No se ha podido actualizar al usuario ni al prestamo");
     }
     DAO::transEnd();
 }
コード例 #8
0
 public function testUltimoCorte3()
 {
     $id = ScenarioMaker::CreateSucursalAndReturnID();
     $this->assertNull(EfectivoController::UltimoCorte(SucursalDAO::getByPK($id)));
 }
コード例 #9
0
 public function testEditar()
 {
     //creamos una sucursal para fines del experimento
     $direccion = array("calle" => "Monte Balcanes", "numero_exterior" => "107", "numero_interior" => null, "colonia" => "Arboledas", "codigo_postal" => "38060", "id_ciudad" => 334, "referencia" => "Calle cerrada", "telefono1" => "4616149974", "telefono2" => "45*451*454");
     $sucursal = SucursalesController::Nueva("Sucursal de phpunit editar " . time(), $direccion, 1, 1, null);
     //para cambiar la moneda
     try {
         $moneda = new Moneda(array("nombre" => "Moneda_" . time(), "simbolo" => "Simbolo_" . time(), "activa" => 1));
         MonedaDAO::save($moneda);
     } catch (Exception $e) {
     }
     //editar basico
     SucursalesController::Editar($id_sucursal = $sucursal["id_sucursal"], $activo = 0, $descripcion = "Descripcion de la sucursal", $direccion = null, $empresas = null, $id_gerente = 1, $id_moneda = $moneda->getIdMoneda(), $razon_social = "Empresa x", $saldo_a_favor = "100000");
     //editar la direccion
     SucursalesController::Editar($id_sucursal = $sucursal["id_sucursal"], $activo = 0, $descripcion = "_EDITADO_" . time(), $direccion = array("calle" => "Monte Balcanes", "numero_exterior" => "107", "colonia" => "Arboledas", "id_ciudad" => 334, "codigo_postal" => "38060", "numero_interior" => null, "texto_extra" => "Calle cerrada", "telefono1" => "4616149974", "telefono2" => "45*451*454"), $empresas = null, $id_gerente = 1, $id_moneda = $moneda->getIdMoneda(), $razon_social = "Empresa x", $saldo_a_favor = "100000");
     //vamos a ver si si se edito esa madre
     $_s = SucursalDAO::getByPK($sucursal["id_sucursal"]);
     $this->assertEquals($descripcion, $_s->getDescripcion());
     $_d = DireccionDAO::getByPK($_s->getIdDireccion());
     $this->assertEquals($_d->getCalle(), "Monte Balcanes");
     $this->assertEquals($_d->getNumeroExterior(), "107");
     $this->assertEquals($_d->getColonia(), "Arboledas");
     $this->assertEquals($_d->getIdCiudad(), 334);
     $this->assertEquals($_d->getCodigoPostal(), "38060");
     //$this->assertEquals($_d->getTextoExtra(),		"Calle cerrada");
 }
コード例 #10
0
 /**
  *
  *
  * Returns:
  *     Object of type CorteDeSucursal which is the last time this happened.
  *     May return null otherwise.
  *
  ***/
 private static function UltimoCorteSucursal($sucursal)
 {
     if (!$sucursal instanceof Sucursal) {
         throw new InvalidDataException("Argument must be instance of Sucursal");
     } else {
         $v_sucursal = SucursalDAO::getByPK($sucursal->getIdSucursal());
     }
     if (is_null($v_sucursal)) {
         throw new InvalidDataException("Sucursal does not exist");
     }
     $cortes = CorteDeSucursalDAO::search(new CorteDeSucursal($v_sucursal->AsArray()), "fin", "desc");
     if (sizeof($cortes) == 0) {
         return null;
     }
     return $cortes[0];
 }
コード例 #11
0
ファイル: ventas.corte.php プロジェクト: kailIII/pos-erp
 * Description:
 *
 *
 * Author:
 *     Manuel Garcia (manuel)
 *     Alan Gonzalez (alan)
 *
 ***/
define("BYPASS_INSTANCE_CHECK", false);
require_once "../../../server/bootstrap.php";
$page = new GerenciaComponentPage();
$page->requireParam("sid", "GET", "Esta sucursal no existe.");
/* ********************************************************************* 
 * Corte
 * ********************************************************************* */
$sucursal = SucursalDAO::getByPK($_GET['sid']);
if (is_null($sucursal)) {
    $page->render();
    exit;
}
$page->addComponent(new TitleComponent("Sucursal " . $sucursal->getDescripcion(), 1));
$table = "<table>";
$cortes = EfectivoController::UltimoCorte($sucursal);
if (!is_null($cortes)) {
    $fecha_inicial = $cortes->getFin();
} else {
    $fecha_inicial = $sucursal->getFechaApertura();
}
$fecha_final = time();
$table .= "  <tr>";
$table .= td("<b>Corte</b>");
コード例 #12
0
 /**
  *Detalles($id_empresa)
  *
  *Muestra los detalles de una empresa en especifico. 
  *
  * @author Juan Manuel Garc&iacute;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");
 }
コード例 #13
0
 /**
  *Lista los productos por empresa, almacen y lote
  */
 public static function listarProductosLote($activo = null, $id_almacen = null, $id_empresa = null)
 {
     //objeto que se regresara
     $company = new stdClass();
     //contiene todas las empresas
     $company->empresas = array();
     //obtenemos todas las empresas
     $empresas = EmpresaDAO::getAll();
     //iteramos las empresas para obtener sus almacenes
     foreach ($empresas as $empresa) {
         //insertamos la empresa a la compañia
         $e = new stdClass();
         $e->id_empresa = $empresa->getIdEmpresa();
         $e->nombre = $empresa->getRazonSocial();
         $e->almacenes = array();
         $almacenes = AlmacenDAO::search(new Almacen(array("id_empresa" => $empresa->getIdEmpresa())));
         //iteramos todos los almacenes de la empresa
         foreach ($almacenes as $almacen) {
             $a = new stdClass();
             $a->id_almacen = $almacen->getIdAlmacen();
             $a->nombre = $almacen->getNombre();
             $a->id_sucursal = $almacen->getIdSucursal();
             $a->sucursal = SucursalDAO::getByPK($a->id_sucursal)->getRazonSocial();
             $a->lotes = array();
             //obtenemos todos los lotes del almacen
             $lotes = LoteDAO::search(new Lote(array("id_almacen" => $almacen->getIdAlmacen())));
             //iteramos todos los lotes del almacen
             foreach ($lotes as $lote) {
                 $l = new StdClass();
                 $l->id_lote = $lote->getIdLote();
                 $l->id_almacen = $lote->getIdAlmacen();
                 $l->folio = $lote->getFolio();
                 $l->lotes_producto = array();
                 //obtenemos todos los productos de un lote
                 $lotes_producto = LoteProductoDAO::search(new LoteProducto(array("id_lote" => $lote->getIdLote())));
                 //iteramos lodos los lotes con producto que perteneces al lote
                 foreach ($lotes_producto as $lote_producto) {
                     $producto = ProductoDAO::getByPK($lote_producto->getIdProducto());
                     $lp = new StdClass();
                     $lp->id_lote = $lote_producto->getIdLote();
                     $lp->id_producto = $lote_producto->getIdProducto();
                     $lp->cantidad = $lote_producto->getCantidad();
                     $lp->id_unidad = $lote_producto->getIdUnidad();
                     $lp->unidad = UnidadMedidaDAO::getByPK($lp->id_unidad)->getAbreviacion();
                     //$lp->recalculo = ProductoDAO::ExistenciasTotales($lp->id_producto);
                     $lp->recalculo = ProductoDAO::ExistenciasLote($lp->id_producto, $lp->id_lote, $lp->id_unidad);
                     $lp->nombre = $producto->getNombreProducto();
                     $lp->codigo = $producto->getCodigoProducto();
                     array_push($l->lotes_producto, $lp);
                 }
                 array_push($a->lotes, $l);
             }
             array_push($e->almacenes, $a);
         }
         array_push($company->empresas, $e);
     }
     return $company;
 }
コード例 #14
0
 private static function validarParametrosSeguimiento($id_seguimiento_de_servicio = null, $id_orden_de_servicio = null, $id_localizacion = null, $estado = null)
 {
     //valida que el seguimiento exista
     if (!is_null($id_seguimiento_de_servicio)) {
         $seguimiento = SeguimientoDeServicioDAO::getByPK($id_seguimiento_de_servicio);
         if (is_null($seguimiento)) {
             return "El seguimiento " . $id_seguimiento_de_servicio . " no existe";
         }
     }
     //valida que la orden de servicio exista y este activa
     if (!is_null($id_orden_de_servicio)) {
         $orden_de_servicio = OrdenDeServicioDAO::getByPK($id_orden_de_servicio);
         if (is_null($orden_de_servicio)) {
             return "La orden de servicio " . $id_orden_de_servicio . " no existe";
         }
         if (!$orden_de_servicio->getActiva()) {
             return "La orden de servicio " . $id_orden_de_servicio . " esta desactivada";
         }
     }
     //valida que la localizacion sea una sucursal valida o sea un -1 para indicar que esta en movimiento
     if (!is_null($id_localizacion)) {
         $sucursal = SucursalDAO::getByPK($id_localizacion);
         if (is_null($sucursal) && $id_localizacion != -1) {
             return "La localizacion " . $id_localizacion . " no es valida";
         }
     }
     //valida que el estado este en rango
     if (!is_null($estado)) {
         $e = self::validarLongitudDeCadena($estado, 255, "estado");
         if (is_string($e)) {
             return $e;
         }
     }
     //No se encontro error
     return true;
 }
コード例 #15
0
 /**
  *
  *Muestra los productos y/o servicios englobados en este paquete as? como las sucursales y las empresas donde lo ofrecen
  *
  * @param id_paquete int Id del paquete a visualizar sus detalles
  * @return detalle_paquete json Informacion del detalle del paquete
  **/
 public static function Detalle($id_paquete)
 {
     Logger::log("consiguiendo los detalles del paquete");
     //valida que el paquete exista
     $paquete = PaqueteDAO::getByPK($id_paquete);
     if (is_null($paquete)) {
         Logger::error("El paquete " . $id_paquete . " no existe");
         throw new Exception("El paquete " . $id_paquete . " no existe");
     }
     //En el primer campo de un arreglo se almacena el paquete en sí, en el segundo las empresas en las que esta disponible el paquete,
     //en el tercero las sucursales en las que esta disponible, en el cuarto los productos que contiene y en el quinto los servicios
     $detalle_paquete = array();
     array_push($detalle_paquete, $paquete);
     $empresas = array();
     $paquetes_empresa = PaqueteEmpresaDAO::search(new PaqueteEmpresa(array("id_paquete" => $id_paquete)));
     foreach ($paquetes_empresa as $paquete_empresa) {
         array_push($empresas, EmpresaDAO::getByPK($paquete_empresa->getIdEmpresa()));
     }
     array_push($detalle_paquete, $empresas);
     $sucursales = array();
     $paquetes_sucursal = PaqueteSucursalDAO::search(new PaqueteSucursal(array("id_paquete" => $id_paquete)));
     foreach ($paquetes_sucursal as $paquete_sucursal) {
         array_push($sucursales, SucursalDAO::getByPK($paquete_sucursal->getIdSucursal()));
     }
     array_push($detalle_paquete, $sucursales);
     $productos = array();
     $productos_paquete = ProductoPaqueteDAO::search(new ProductoPaquete(array("id_paquete" => $id_paquete)));
     foreach ($productos_paquete as $producto_paquete) {
         array_push($productos, ProductoDAO::getByPK($producto_paquete->getIdProducto()));
     }
     array_push($detalle_paquete, $productos);
     $servicios = array();
     $servicios_paquete = OrdenDeServicioPaqueteDAO::search(new OrdenDeServicioPaquete(array("id_paquete" => $id_paquete)));
     foreach ($servicios_paquete as $servicio_paquete) {
         array_push($servicios, ServicioDAO::getByPK($servicio_paquete->getIdServicio()));
     }
     array_push($detalle_paquete, $servicios);
     Logger::log("Detalle de paquete " . $id_paquete . " conseguido exitosamente con " . count($empresas) . "\n                empresas, " . count($sucursales) . " sucursales, " . count($productos) . " productos y " . count($servicios) . " servicios");
     return $detalle_paquete;
 }
コード例 #16
0
ファイル: sucursales.editar.php プロジェクト: kailIII/pos-erp
<?php

define("BYPASS_INSTANCE_CHECK", false);
require_once "../../../server/bootstrap.php";
$page = new GerenciaComponentPage();
// Parametros necesarios
$page->requireParam("sid", "GET", "Esta sucursal no existe.");
$esta_sucursal = SucursalDAO::getByPK($_GET["sid"]);
$esta_direccion = DireccionDAO::getByPK($esta_sucursal->getIdDireccion());
// Titulo de la pagina
$page->addComponent(new TitleComponent("Editar sucursal " . $esta_sucursal->getDescripcion(), 2));
//forma de nueva empresa
$sucursal_form = new DAOFormComponent($esta_sucursal);
$sucursal_form->hideField(array("id_sucursal", "id_direccion", "fecha_apertura", "fecha_baja"));
$sucursal_form->renameField(array("id_gerente" => "id_usuario"));
$sucursal_form->createComboBoxJoin("id_usuario", "nombre", UsuarioDAO::getAll(), $esta_sucursal->getIdGerente());
$sucursal_form->createComboBoxJoin("id_tarifa", "nombre", TarifaDAO::getAll(), $esta_sucursal->getIdTarifa());
$sucursal_form->createComboBoxJoin("activa", "activa", array(array("id" => false, "caption" => "No"), array("id" => true, "caption" => "S&iacute;")), $esta_sucursal->getActiva());
$page->addComponent($sucursal_form);
$page->addComponent(new TitleComponent("Direccion", 3));
$direccion_form = new DAOFormComponent($esta_direccion);
$direccion_form->hideField(array("id_direccion", "ultima_modificacion", "id_usuario_ultima_modificacion"));
$direccion_form->createComboBoxJoin("id_ciudad", "nombre", CiudadDAO::getAll(), $esta_direccion->getIdDireccion());
$direccion_form->renameField(array("id_ciudad" => "ciudad"));
$js = "(function(){\n\t\t\t\tPOS.API.POST(\"api/sucursal/editar/\",{\n\t\t\t\t\tid_sucursal\t\t: " . $_GET['sid'] . ",\n\t\t\t\t\tdescripcion\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "descripcion\").getValue(),\n\t\t\t\t\tid_gerente\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "id_usuario\").getValue(),\n\t\t\t\t\tid_tarifa\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "id_tarifa\").getValue(),\n\t\t\t\t\tactivo\t\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "activa\").getValue(),\n\t\t\t\t\tdireccion : Ext.JSON.encode({\n\t\t\t\t\t\t \tcalle\t\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "calle\").getValue(),\n\t\t\t\t\t\t\tnumero_exterior\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "numero_exterior\").getValue(),\n\t\t\t\t\t\t    numero_interior\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "numero_interior\").getValue(),\n\t\t\t\t\t\t    colonia\t\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "colonia\").getValue(),\n\t\t\t\t\t\t    codigo_postal\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "codigo_postal\").getValue(),\n\t\t\t\t\t\t    telefono1\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "telefono\").getValue(),\n\t\t\t\t\t\t    telefono2\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "telefono2\").getValue(),\n\t\t\t\t\t\t    id_ciudad\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "ciudad\").getValue(),\n\t\t\t\t\t\t    referencia\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "referencia\").getValue()\n\t\t\t\t\t})\n\t\t\t\t},{ callback : function(a,b){\n\t\t\t\t\twindow.onbeforeunload = function(){ return;\t};\n\t\t\t\t\twindow.location = \"sucursales.ver.php?sid=\"+ " . $_GET['sid'] . ";\n\t\t\t\t}});\n\t\t\t})()";
$direccion_form->addOnClick("Editar sucursal", $js);
$page->addComponent($direccion_form);
$page->render();
コード例 #17
0
 /**
  * Crea un pdf con el estado de cuenta de el cliente especificado
  * @param Array $args,  $args['id_cliente'=>12[,'tipo_venta'=> 'credito | contado | saldo'] ], por default obtiene todas las compras del cliente
  */
 public static function imprimirEstadoCuentaCliente($args)
 {
     //verificamos que se haya especificado el id del cliente
     if (!isset($args['id_cliente'])) {
         Logger::log("Error al obtener el estado de cuenta, no se ha especificado un cliente.");
         die('{"success": false, "reason": "Error al obtener el estado de cuenta, no se ha especificado un cliente."}');
     }
     //verificamos que el cliente exista
     if (!($cliente = ClienteDAO::getByPK($args['id_cliente']))) {
         Logger::log("Error al obtener el estado de cuenta, no se tiene registro del cliente {$args['id_cliente']}.");
         die('{"success": false, "reason": "Error al obtener el estado de cuenta, no se tiene registro del cliente ' . $args['id_cliente'] . '"}');
     }
     //obtenemos los datos del emisor
     $estado_cuenta = estadoCuentaCliente($args);
     //buscar los datos del emisor
     if (!($emisor = PosConfigDAO::getByPK('emisor'))) {
         Logger::log("no encuentro los datos del emisor");
         die("no encuentro los datos del emisor");
     }
     $emisor = json_decode($emisor->getValue())->emisor;
     $sucursal = SucursalDAO::getByPK($_SESSION['sucursal']);
     if (!$sucursal) {
         die("Sucursal invalida");
     }
     include_once 'librerias/ezpdf/class.pdf.php';
     include_once 'librerias/ezpdf/class.ezpdf.php';
     $pdf = new Cezpdf();
     $pdf->selectFont('../server/librerias/ezpdf/fonts/Helvetica.afm');
     //margenes de un centimetro para toda la pagina
     $pdf->ezSetMargins(1, 1, 1, 1);
     /*
      * LOGO
      */
     if (!($logo = PosConfigDAO::getByPK('url_logo'))) {
         Logger::log("Verifique la configuracion del pos_config, no se encontro el camṕo 'url_logo'");
         die("Verifique la configuracion del POS, no se encontro el url del logo");
     }
     //addJpegFromFile(imgFileName,x,y,w,[h])
     //detectamos el tipo de imagen del logo
     if (substr($logo->getValue(), -3) == "jpg" || substr($logo->getValue(), -3) == "JPG" || substr($logo->getValue(), -4) == "jpeg" || substr($logo->getValue(), -4) == "JPEG") {
         $pdf->addJpegFromFile($logo->getValue(), puntos_cm(2), puntos_cm(25.5), puntos_cm(3.5));
     } elseif (substr($logo->getValue(), -3) == "png" || substr($logo->getValue(), -3) == "PNG") {
         $pdf->addPngFromFile($logo->getValue(), puntos_cm(2), puntos_cm(25.5), puntos_cm(3.5));
     } else {
         Logger::log("Verifique la configuracion del pos_config, la extension de la imagen del logo no es compatible");
         die("La extension de la imagen usada para el logo del negocio no es valida.");
     }
     /*     * ************************
      * ENCABEZADO
      * ************************* */
     $e = "<b>" . self::readableText($emisor->nombre) . "</b>\n";
     $e .= formatAddress($emisor);
     $e .= "RFC: " . $emisor->rfc . "\n\n";
     //datos de la sucursal
     $e .= "<b>Lugar de expedicion</b>\n";
     $e .= self::readableText($sucursal->getDescripcion()) . "\n";
     $e .= formatAddress($sucursal);
     $datos = array(array("emisor" => $e));
     $pdf->ezSetY(puntos_cm(28.6));
     $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'] = puntos_cm(7.3);
     $opciones_tabla['width'] = puntos_cm(11);
     $opciones_tabla['textCol'] = array(0, 0, 0);
     $opciones_tabla['titleFontSize'] = 12;
     $opciones_tabla['rowGap'] = 3;
     $opciones_tabla['colGap'] = 3;
     $pdf->ezTable($datos, "", "", $opciones_tabla);
     $cajero = UsuarioDAO::getByPK($_SESSION['userid'])->getNombre();
     $datos = array(array("col" => "<b>Cajero</b>"), array("col" => self::readableText($cajero)), array("col" => "<b>Cliente</b>"), array("col" => self::readableText($cliente->getRazonSocial())), array("col" => "<b>Limite de  Credito</b>"), array("col" => FormatMoney($estado_cuenta->limite_credito, DONT_USE_HTML)), array("col" => "<b>Saldo</b>"), array("col" => FormatMoney($estado_cuenta->saldo, DONT_USE_HTML)));
     $pdf->ezSetY(puntos_cm(28.8));
     $opciones_tabla['xPos'] = puntos_cm(12.2);
     $opciones_tabla['width'] = puntos_cm(6);
     $opciones_tabla['showLines'] = 0;
     $opciones_tabla['shaded'] = 2;
     $opciones_tabla['shadeCol'] = array(1, 1, 1);
     //$opciones_tabla['shadeCol2'] = array(0.054901961, 0.756862745, 0.196078431);
     $opciones_tabla['shadeCol2'] = array(0.8984375, 0.95703125, 0.99609375);
     $pdf->ezTable($datos, "", "", $opciones_tabla);
     //roundRect($pdf, puntos_cm(12.2), puntos_cm(28.8), puntos_cm(6), puntos_cm(4.25));
     /**
      * ESTADO DE CUENTA
      */
     $elementos = array(array('id_venta' => 'Venta', 'fecha' => 'Fecha', 'sucursal' => 'Sucursal', 'cajero' => 'Cajero', 'tipo_venta' => 'Tipo', 'tipo_pago' => 'Pago', 'total' => 'Total', 'pagado' => 'Pagado', 'saldo' => 'Saldo'));
     foreach ($estado_cuenta->array_ventas as $venta) {
         $array_venta = array();
         $array_venta['id_venta'] = $venta['id_venta'];
         $array_venta['fecha'] = $venta['fecha'];
         $array_venta['sucursal'] = self::readableText($venta['sucursal']);
         $array_venta['cajero'] = self::readableText($venta['cajero']);
         $array_venta['cancelada'] = self::readableText($venta['cancelada']);
         $array_venta['tipo_venta'] = self::readableText($venta['tipo_venta']);
         $array_venta['tipo_pago'] = self::readableText($venta['tipo_pago']);
         $array_venta['total'] = FormatMoney($venta['total'], DONT_USE_HTML);
         $array_venta['pagado'] = FormatMoney($venta['pagado'], DONT_USE_HTML);
         $array_venta['saldo'] = FormatMoney($venta['saldo'], DONT_USE_HTML);
         array_push($elementos, $array_venta);
     }
     $pdf->ezText("", 8, array('justification' => 'center'));
     $pdf->ezSetY(puntos_cm(24));
     $opciones_tabla['xPos'] = puntos_cm(2);
     $opciones_tabla['width'] = puntos_cm(16.2);
     $pdf->ezTable($elementos, "", "Estado de Cuenta", $opciones_tabla);
     //roundRect($pdf, puntos_cm(2), puntos_cm(24.3), puntos_cm(16.2), puntos_cm(3.2));
     /*     * ************************
      * notas de abajo
      * ************************* */
     $pdf->setLineStyle(1);
     $pdf->setStrokeColor(0.3359375, 0.578125, 0.89453125);
     $pdf->line(puntos_cm(2), puntos_cm(1.3), puntos_cm(18.2), puntos_cm(1.3));
     $pdf->addText(puntos_cm(2), puntos_cm(1.0), 7, "Fecha de impresion: " . date("d/m/y") . " " . date("H:i:s"));
     //addJpegFromFile(imgFileName,x,y,w,[h])
     //$pdf->addJpegFromFile("../www/media/logo_simbolo.jpg", puntos_cm(15.9), puntos_cm(.25), 25);
     $pdf->addText(puntos_cm(16.7), puntos_cm(0.6), 8, "caffeina.mx");
     $pdf->ezStream();
 }
コード例 #18
0
 /**
  *
  *Registra una nueva compra fuera de caja, puede usarse para que el administrador haga directamente una compra. El usuario y al sucursal seran tomados de la sesion. La fecha sera tomada del servidor. La empresa sera tomada del almacen del cual fueron tomados los productos.
  *
  * @param descuento float Monto descontado por descuentos
  * @param subtotal float Total de la compra antes de impuestos y descuentos.
  * @param detalle json Objeto que contendr el arreglo de id productos, cantidad,  precio, descuento, id de unidad y procesado que involucran esta compra.
  * @param impuesto float Monto agregado por impuestos
  * @param tipo_compra string Si la compra es a credito o de contado
  * @param retencion float Monto agregado por retenciones
  * @param id_usuario_compra int Id usuario al que se le compra, si es a una sucursal, se pone el id en negativo
  * @param id_empresa int Id de la empresa a nombre de la cual se hace la compra
  * @param total float Total de la compra
  * @param cheques json Si el tipo de pago es con cheque, se almacena el nombre del banco, el monto y los ultimos 4 numeros del o de los cheques
  * @param saldo float Cantidad pagada de la 
  * @param tipo_de_pago string Si el pago sera en efectivo, con cheque o tarjeta
  * @return id_compra int Id autogenerado por la inserci�n de la compra
  **/
 public static function Nueva($descuento, $detalle, $id_empresa, $id_usuario_compra, $impuesto, $retencion, $subtotal, $tipo_compra, $total, $cheques = null, $id_sucursal = null, $saldo = 0, $tipo_de_pago = null)
 {
     Logger::log(" ===== Creando nueva compra... ===== ");
     //validemos al comprador
     $proveedor = UsuarioDAO::getByPK($id_usuario_compra);
     if (is_null($proveedor)) {
         Logger::error("el provedor {$id_usuario_compra} no exite");
         throw new InvalidDataException("El proveedor no existe");
     }
     if ($proveedor->getActivo() == false) {
         throw new BusinessLogicException("No se puede comprar de un proveedor no activo.");
     }
     //validemos la empresa
     $empresa = EmpresaDAO::getByPK($id_empresa);
     if (is_null($empresa)) {
         Logger::error("La empresa {$id_empresa} no existe");
         throw new InvalidDataException("La empresa que compra no existe.");
     }
     if ($empresa->getActivo() == false) {
         throw new BusinessLogicException("Una empresa inactiva no puede hacer compras.");
     }
     //validemos los valores conocidos
     //( 0 >= descuento > 100, subtotal > 0, total >= subtotal, etc etc)
     //validemos sucursal
     $sucursal = null;
     if (!is_null($id_sucursal) && strlen($id_sucursal) > 0) {
         $sucursal = SucursalDAO::getByPK($id_sucursal);
         if (is_null($sucursal)) {
             Logger::error("La sucursal {$id_sucursal} no existe");
             //throw new InvalidDataException("La sucural que se envio no existe.");
         }
     }
     //validemos detalles de compra
     //debe traer
     // 	-id_producto
     //	-cantidad
     //	-precio
     //	-lote
     if (!is_array($detalle)) {
         throw InvalidDataException("El detalle no es un arreglo");
     }
     for ($detalleIterator = 0; $detalleIterator < sizeof($detalle); $detalleIterator++) {
         //por cada producto
         //	-debe existir
         //	-si se lo compro a un proveedor no hay pedo
         // 	 si se lo compro a un cliente, debe de tener comprar_caja = 1
         //	-debe tener cantidad mayor a 0
         //	-que exista el lote a donde va a ir
         $p = $detalle[$detalleIterator];
         if (!isset($p->precio)) {
             throw new InvalidArgumentException("No se envio el precio");
         }
         if (!isset($p->id_producto)) {
             throw new InvalidArgumentException("No se envio el id_producto");
         }
         if (!isset($p->cantidad)) {
             throw new InvalidArgumentException("No se envio la cantidad");
         }
         if (!isset($p->lote)) {
             throw new InvalidArgumentException("No se envio el lote");
         }
         $producto = ProductoDAO::getByPK($p->id_producto);
         if (is_null($producto)) {
             throw new InvalidArgumentException("El producto a comprar no existe");
         }
         if ($p->cantidad <= 0) {
             throw new InvalidArgumentException("No puedes comprar 0 unidades");
         }
     }
     $s = SesionController::getCurrentUser();
     //terminaron las validaciones
     $compra = new Compra();
     $compra->setIdVendedorCompra($id_usuario_compra);
     $compra->setTipoDeCompra($tipo_compra);
     $compra->setFecha(time());
     $compra->setSubtotal($subtotal);
     $compra->setImpuesto($impuesto);
     $compra->setDescuento($descuento);
     $compra->setTotal($subtotal + $impuesto);
     $compra->setIdUsuario($s->getIdUsuario());
     $compra->setIdEmpresa($id_empresa);
     $compra->setSaldo(0);
     $compra->setCancelada(false);
     $compra->setTipoDePago($tipo_de_pago);
     $compra->setRetencion(0);
     try {
         DAO::transBegin();
         CompraDAO::save($compra);
     } catch (Exception $e) {
         DAO::transRollback();
         throw InvalidDatabaseOperationException($e);
     }
     for ($detalleIterator = 0; $detalleIterator < sizeof($detalle); $detalleIterator++) {
         //por cada producto
         //	--- procesos ---
         //	-insertar en productoempresa
         //	-insertar en loteproducto
         //	-insertar en entradalote
         //	-si el tipo de precio de venta es costo, actualizar
         //	-insertar compra producto
         $p = $detalle[$detalleIterator];
         try {
             ProductoEmpresaDAO::save(new ProductoEmpresa(array("id_empresa" => $id_empresa, "id_producto" => $p->id_producto)));
             if (is_null($p->lote)) {
                 throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto);
             }
             if (strlen($p->lote) == 0) {
                 throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto);
             }
             //busquemos el id del lote
             $l = LoteDAO::search(new Lote(array("folio" => $p->lote)));
             $l = $l[0];
             //busquemos la unidad que nos mandaron
             $uAbreviacion = $p->id_unidad;
             $uResults = UnidadMedidaDAO::search(new UnidadMedida(array("abreviacion" => $uAbreviacion, "activa" => 1)));
             if (sizeof($uResults) != 1) {
                 throw new InvalidDataException("La unidad de medida `" . $p->id_unidad . "` no existe, o no esta activa.");
             } else {
                 $p->id_unidad = $uResults[0]->getIdUnidadMedida();
             }
             //busequemos si este producto ya existe en este lote
             $lp = LoteProductoDAO::getByPK($l->getIdLote(), $p->id_producto);
             if (is_null($lp)) {
                 //no existe, insertar
                 $loteProducto = new LoteProducto(array("id_lote" => $l->getIdLote(), "id_producto" => $p->id_producto, "cantidad" => $p->cantidad, "id_unidad" => $p->id_unidad));
                 LoteProductoDAO::save($loteProducto);
             } else {
                 //ya existe, sumar
                 //revisemos si es de la misma unidad
                 if ($lp->getIdUnidad() == $p->id_unidad) {
                     //es igual, solo hay que sumar
                     $lp->setCantidad($lp->getCantidad() + $p->cantidad);
                 } else {
                     //no es igual, hay que convertir
                     try {
                         $r = UnidadMedidaDAO::convertir($p->id_unidad, $lp->getIdUnidad(), $p->cantidad);
                     } catch (BusinessLogicException $ide) {
                         //no se pudo convertir porque son de
                         //diferentes categorias
                         throw $ide;
                         //mostrar una excpetion mas fresona
                     }
                     $lp->setCantidad($lp->getCantidad() + $r);
                 }
                 //$lp->setCantidad( $lp->getCantidad() + $p->cantidad );
                 LoteProductoDAO::save($lp);
             }
             $loteEntrada = new LoteEntrada(array("id_lote" => $l->getIdLote(), "id_usuario" => $s->getIdUsuario(), "fecha_registro" => time(), "motivo" => "Compra a Proveedor"));
             LoteEntradaDAO::save($loteEntrada);
             LoteEntradaProductoDAO::save(new LoteEntradaProducto(array("id_lote_entrada" => $loteEntrada->getIdLoteEntrada(), "id_producto" => $p->id_producto, "id_unidad" => $p->id_unidad, "cantidad" => $p->cantidad)));
             $compraProducto = new CompraProducto(array("id_compra" => $compra->getIdCompra(), "id_producto" => $p->id_producto, "cantidad" => $p->cantidad, "precio" => $p->precio, "descuento" => 0, "impuesto" => 0, "id_unidad" => $p->id_unidad, "retencion" => 0));
             CompraProductoDAO::save($compraProducto);
         } catch (InvalidDataException $e) {
             Logger::error($e);
             DAO::transRollback();
             throw $e;
         } catch (exception $e) {
             Logger::error($e);
             DAO::transRollback();
             throw new InvalidDatabaseOperationException($e);
         }
     }
     //for
     try {
         DAO::transEnd();
     } catch (Exception $e) {
         throw InvalidDatabaseOperationException($e);
     }
     Logger::log("===== COMPRA " . $compra->getIdCompra() . " EXITOSA ===== ");
     return array("id_compra" => $compra->getIdCompra());
 }
コード例 #19
0
 /**
  *
  *Obtener los detalles de un cliente.
  *
  * @param id_cliente int Id del cliente del cual se listarn sus datos.
  * @return cliente json Arreglo que contendr� la informaci�n del cliente. 
  **/
 public static function Detalle($id_cliente)
 {
     Logger::log("Listando los detalles del cliente");
     //valida que el cliente exista, que sea cliente y que este activo
     /*$validar = self::validarParametrosCliente($id_cliente);
     		if(is_string($validar))
     		{
     			Logger::error($validar);
     			throw new Exception($validar,901);
     		}*/
     //Se regresa un arreglo que contendra en el primer campo el cliente en si, en segundo campo estara
     //su direccion, el tercero sera su direccion alterna, el cuarto sera la sucursal en la que fue dado de alta,
     //la quinta sera el rol que tiene, la sexta sera su clasificacion, la septima la moneda que prefiere.
     $cliente = array();
     $c = UsuarioDAO::getByPK($id_cliente);
     array_push($cliente, $c);
     array_push($cliente, DireccionDAO::getByPK($c->getIdDireccion()));
     array_push($cliente, DireccionDAO::getByPK($c->getIdDireccionAlterna()));
     array_push($cliente, SucursalDAO::getByPK($c->getIdSucursal()));
     array_push($cliente, RolDAO::getByPK($c->getIdRol()));
     array_push($cliente, ClasificacionClienteDAO::getByPK($c->getIdClasificacionCliente()));
     array_push($cliente, MonedaDAO::getByPK($c->getIdMoneda()));
     array_push($cliente, ExtraParamsValoresDAO::getVals("usuarios", $id_cliente));
     return $cliente;
 }
コード例 #20
0
 public static function Corte($fecha_final, $id_sucursal, $total_efectivo)
 {
     if ($fecha_final > time()) {
         throw new BusinessLogicException("You must give a time in the past.");
     }
     if ($fecha_final == 0) {
         $fecha_final = time();
     }
     $suc = SucursalDAO::getByPK($id_sucursal);
     if (is_null($suc)) {
         throw new InvalidDataException("'Sucursal' does not exist");
     }
     $corte = EfectivoController::UltimoCorte($suc);
     if (is_null($corte)) {
         //'CordeDeSucursal' has never happende,
         //use the opening date.
         $start_date = $suc->getFechaApertura();
     } else {
         $start_date = $corte->getFin();
     }
     //ASSERT( $fecha_final . "<=" . $start_date );
     $ingresos_por_tipo = array("BANCO" => 0.0, "CAJA" => 0.0);
     $ventas = VentasController::Lista($start_date, $fecha_final);
     //esto regresa, total, subtotal, impuesto
     $ventasTotal = VentaDAO::TotalVentasNoCanceladasAContadoDesdeHasta($start_date, $fecha_final);
     //$abonosTotal = AbonoVenta::TotalAbonosNoCanceladosDesdeHasta( $start_date, $fecha_final );
     /*
     foreach( $ventas as $v ){
     
         switch( $v->tipo_de_pago ){
             cash :      $ingresos[ cash ] += $v->getTotal();
             banco :     $ingresos[ banco ] += $v->getTotal()
             cheque :
             default: throw new Exception();
     
         }
     }
     */
     $cu = SesionController::Actual();
     $corte = new CorteDeSucursal();
     $corte->setIdSucursal($id_sucursal);
     $corte->setIdUsuario($cu["id_usuario"]);
     $corte->setInicio($start_date);
     $corte->setFin($fecha_final);
     $corte->setFechaCorte(time());
     try {
         CorteDeSucursalDAO::save($corte);
     } catch (Exception $e) {
         throw new InvalidDatabaseException($e);
     }
     return array("id_corte_sucursal" => $corte->getIdCorteSucursal());
 }
コード例 #21
0
function funcion_sucursal($id_sucursal)
{
    return SucursalDAO::getByPK($id_sucursal) ? SucursalDAO::getByPK($id_sucursal)->getRazonSocial() : "------";
}
コード例 #22
0
 /**
  *
  *Creara un nuevo almacen en una sucursal, este almacen contendra lotes.
  *
  * @param id_empresa int Id de la empresa a la que pertenecen los productos de este almacen
  * @param id_sucursal int El id de la sucursal a la que pertenecera este almacen.
  * @param id_tipo_almacen int Id del tipo de almacen 
  * @param nombre string nombre del almacen
  * @param descripcion string Descripcion extesa del almacen
  * @return id_almacen int el id recien generado
  **/
 static function Nuevo($id_empresa, $id_sucursal, $id_tipo_almacen, $nombre, $descripcion = null)
 {
     //verificamos que exista la empresa
     if (!is_null($id_empresa) && !($empresa = EmpresaDAO::getByPK($id_empresa))) {
         throw new Exception("No se tiene registro de la empresa {$id_empresa}");
     }
     //verificamos que exista la sucursal
     if (!is_null($id_sucursal) && !($sucursal = SucursalDAO::getByPK($id_sucursal))) {
         throw new Exception("No se tiene registro de la sucursal {$id_sucursal}");
     }
     //verificamos que exista el tipo de almacen
     if (!is_null($id_tipo_almacen) && !($almacen = TipoAlmacenDAO::getByPK($id_tipo_almacen))) {
         throw new Exception("No se tiene registro del tipo de almacen {$id_tipo_almacen}");
     }
     //verificamos que se haya especificado el nombre
     if (!ValidacionesController::validarLongitudDeCadena(trim($nombre), 2, 100)) {
         throw new Exception("El nombre debe ser una cadena entre 2 y 100 caracteres, se encontro \"" . trim($nombre) . "\" ");
     }
     //Se valida si hay un almacen con ese mimso nombre en esta sucursal
     $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal)));
     foreach ($almacenes as $almacen) {
         if ($almacen->getNombre() == trim($nombre) && $almacen->getActivo()) {
             Logger::log("El nombre (" . $nombre . ") ya esta siendo usado por el almacen: " . $almacen->getIdAlmacen());
             throw new Exception("El nombre ya esta en uso");
         }
     }
     //Si se recibe un tipo de almacen de consignacion, se manda una excepcion, pues no se puede crear un almacen
     //de consignacion con este metodo.
     if ($id_tipo_almacen == 2) {
         Logger::error("No se puede crear un almacen de consignacion con este metodo");
         throw new Exception("No se puede crear un almacen de consignacion con este metodo");
     }
     //Solo puede haber un almacen por tipo por cada empresa en una sucursal.
     $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal, "id_empresa" => $id_empresa, "id_tipo_almacen" => $id_tipo_almacen)));
     if (!empty($almacenes)) {
         Logger::error("Ya existe un almacen (" . $almacenes[0]->getIdAlmacen() . ") de este tipo (" . $id_tipo_almacen . ") en esta sucursal (" . $id_sucursal . ") para esta empresa (" . $id_empresa . ")");
         throw new Exception("Ya existe un almacen de este tipo en esta sucursal para esta empresa");
     }
     //Se inicializa el registro a guardar con los datos obtenidos.
     $almacen = new Almacen();
     $almacen->setNombre(trim($nombre));
     $almacen->setDescripcion($descripcion);
     $almacen->setIdSucursal($id_sucursal);
     $almacen->setIdEmpresa($id_empresa);
     $almacen->setIdTipoAlmacen($id_tipo_almacen);
     $almacen->setActivo(1);
     DAO::transBegin();
     try {
         AlmacenDAO::save($almacen);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear el nuevo almacen");
         throw new Exception("No se pudo crear el nuevo almacen");
     }
     DAO::transEnd();
     Logger::log("Almacen " . $almacen->getIdAlmacen() . " creado exitosamente");
     return array("id_almacen" => (int) $almacen->getIdAlmacen());
 }