$btn_eliminar->addApiCall("api/sucursal/almacen/eliminar", "GET");
    $btn_eliminar->onApiCallSuccessRedirect("sucursales.lista.almacen.php");
    $btn_eliminar->addName("eliminar");
    $funcion_eliminar = " function eliminar_almacen(btn){" . "if(btn == 'yes')" . "{" . "var p = {};" . "p.id_almacen = " . $_GET["aid"] . ";" . "sendToApi_eliminar(p);" . "}" . "}" . "      " . "function confirmar(){" . " Ext.MessageBox.confirm('Desactivar', 'Desea eliminar este almacen?', eliminar_almacen );" . "}";
    $btn_eliminar->addOnClick("confirmar", $funcion_eliminar);
    $menu->addMenuItem($btn_eliminar);
    $page->addComponent($menu);
}
//
// Forma de producto
//
$form = new DAOFormComponent($este_almacen);
$form->setEditable(false);
$form->hideField(array("id_almacen"));
$form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::getAll(), $este_almacen->getIdSucursal());
$form->createComboBoxJoin("id_empresa", "razon_social", EmpresaDAO::search(new Empresa(array("activo" => 1))), $este_almacen->getIdEmpresa());
$form->createComboBoxJoin("id_tipo_almacen", "descripcion", TipoAlmacenDAO::getAll(), $este_almacen->getIdTipoAlmacen());
$page->addComponent($form);
$page->addComponent(new TitleComponent("Productos en este almacen"), 3);
$tabla = new TableComponent(array("id_producto" => "Producto", "id_unidad" => "Unidad", "cantidad" => "Cantidad"), ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $_GET["aid"]))));
function funcion_producto($id_producto)
{
    return ProductoDAO::getByPK($id_producto) ? ProductoDAO::getByPK($id_producto)->getNombreProducto() : "--------";
}
function funcion_unidad($id_unidad)
{
    return UnidadDAO::getByPK($id_unidad) ? UnidadDAO::getByPK($id_unidad)->getNombre() : "---------";
}
$tabla->addColRender("id_producto", "funcion_producto");
$tabla->addColRender("id_unidad", "funcion_unidad");
$page->addComponent($tabla);
 /**
  *
  * Crear una nueva empresa. Por default una nueva empresa no tiene sucursales.
  * Varios RFC`s pueden repetirse siempre y cuando solo exista una empresa activa.
  *
  * @author Juan Manuel Garc&iacute;a Carmona <*****@*****.**>
  *
  * @param contabilidad json JSON donde se describe la moneda que usara como base la empresa, indica la descripción del ejercicio, el periodo inicial y la duración de cada periodo
  * @param direccion json {    "calle": "Francisco I Madero",    "numero_exterior": "1009A",    "numero_interior": 12,     "colonia": "centro",    "codigo_postal": "38000",    "telefono1": "4611223312",    "telefono2": "",       "id_ciudad": 3,    "referencia": "El local naranja"}
  * @param razon_social string El nombre de la nueva empresa.
  * @param rfc string RFC de la nueva empresa.
  * @param cuentas_bancarias json arreglo que contiene los id de las cuentas bancarias
  * @param direccion_web string Direccion del sitio de la empresa
  * @param duplicar bool Significa que se duplicara una empresa, solo es una bandera, en caso de que exista y sea = true ,  significa que duplicara todo lo referente a la empresa (direccion, impuestos asociados, cuentas bancarias, etc..)
  * @param email string Correo electronico de la empresa
  * @param impuestos_compra json Impuestos de compra por default que se heredan  a los productos
  * @param impuestos_venta json Impuestos de venta por default que se heredan a los productos
  * @param mensaje_morosos string mensaje enviado a los clientes cuando un pago es demorado
  * @param representante_legal string El nombre del representante legal de la nueva empresa.
  * @param uri_logo string url del logo de la empresa
  * @return id_empresa int El ID autogenerado de la nueva empresa.
  **/
 static function Nuevo($contabilidad, $direccion, $razon_social, $rfc, $cuentas_bancarias = null, $direccion_web = null, $duplicar = false, $email = null, $impuestos_compra = null, $impuestos_venta = null, $mensaje_morosos = null, $representante_legal = null, $uri_logo = null)
 {
     //verificamos los impuestos de compra
     if ($impuestos_compra !== NULL && !is_array($impuestos_compra)) {
         Logger::error("Error : Verifique los datos especiicados en los impuestos de compra, debe ser una array no vacio");
         throw new InvalidDataException("Error : Verifique los datos especiicados en los impuestos de compra, debe ser una array no vacio");
     }
     //verificamos los impuestos de venta
     if ($impuestos_venta !== NULL && !is_array($impuestos_venta)) {
         Logger::error("Error : Verifique los datos especiicados en los impuestos de venta, debe ser una array no vacio");
         throw new InvalidDataException("Error : Verifique los datos especiicados en los impuestos de venta, debe ser una array no vacio");
     }
     //verificamos si se enviaron todos los parametros
     if (empty($contabilidad->id_moneda) || empty($contabilidad->ejercicio) || empty($contabilidad->periodo_actual) || empty($contabilidad->duracion_periodo)) {
         Logger::error("Error : Verifique que la información de contabilidad este completa");
         throw new InvalidDataException("Verifique que la información de contabilidad este completa : " . $contabilidad);
     }
     //verificamos si se enviaron valores correctos
     if (!is_numeric($contabilidad->id_moneda) || !is_numeric($contabilidad->periodo_actual) || !is_numeric($contabilidad->duracion_periodo)) {
         Logger::error("Error : Verifique que la información de contabilidad sea correcta");
         throw new InvalidDataException("Verifique que la información de contabilidad sea correcta");
     }
     //validamos decimales
     if ($contabilidad->id_moneda - (int) $contabilidad->id_moneda !== 0 || $contabilidad->periodo_actual - (int) $contabilidad->periodo_actual !== 0 || $contabilidad->duracion_periodo - (int) $contabilidad->duracion_periodo !== 0) {
         Logger::error("Error : Verifique que la información de contabilidad sea correcta, el id_moneda, periodo_actual y duracion_periodo deben ser valores enteros");
         throw new InvalidDataException("Error : Verifique que la información de contabilidad sea correcta, el id_moneda, periodo_actual y duracion_periodo deben ser valores enteros");
     }
     if ($contabilidad->duracion_periodo < "1" || $contabilidad->duracion_periodo === "5" || $contabilidad->duracion_periodo > "6") {
         Logger::error("Error : Verifique que la duracion de los perodos, solo pueden durar 1, 2, 3, 4 y 6 meses");
         throw new InvalidDataException("Error : Verifique que la duracion de los perodos, solo pueden durar 1, 2, 3, 4 y 6 meses");
     }
     if ($contabilidad->periodo_actual > 12 / $contabilidad->duracion_periodo) {
         Logger::error("Error : Verifique el valor del periodo actual, debe concordar con la relacion de la duracion de los periodos");
         throw new InvalidDataException("Error : Verifique el valor del periodo actual, debe concordar con la relacion de la duracion de los periodos");
     }
     if (is_null($direccion)) {
         throw new InvalidDataException("Missing direccion");
     }
     if (!is_array($direccion)) {
         $direccion = object_to_array($direccion);
     }
     $id_direccion = DireccionController::NuevaDireccion(isset($direccion["calle"]) ? $direccion["calle"] : null, isset($direccion["numero_exterior"]) ? $direccion["numero_exterior"] : null, isset($direccion["colonia"]) ? $direccion["colonia"] : null, isset($direccion["id_ciudad"]) ? $direccion["id_ciudad"] : null, isset($direccion["codigo_postal"]) ? $direccion["codigo_postal"] : null, isset($direccion["numero_interior"]) ? $direccion["numero_interior"] : null, isset($direccion["referencia"]) ? $direccion["referencia"] : null, isset($direccion["telefono1"]) ? $direccion["telefono1"] : null, isset($direccion["telefono2"]) ? $direccion["telefono2"] : null);
     DAO::transBegin();
     $id_logo = -1;
     //verificamos si se ha enviado informacion sobre un logo
     if (!empty($uri_logo)) {
         $logo = new Logo(array("imagen" => $uri_logo, "tipo" => "-"));
         try {
             LogoDAO::save($logo);
         } catch (Exception $e) {
             DAO::transRollback();
             Logger::error("No se pudo crear la empresa, error al crear el logo: " . $e->getMessage());
             throw new Exception("No se pudo crear la empresa, consulte a su administrador de sistema", 901);
         }
         $id_logo = $logo->getIdLogo();
     }
     //Se crea la empresa con los parametros obtenidos.
     $empresa = new Empresa(array("id_direccion" => $id_direccion, "rfc" => $rfc, "razon_social" => trim($razon_social), "representante_legal" => $representante_legal, "fecha_alta" => time(), "fecha_baja" => null, "activo" => true, "direccion_web" => $direccion_web, "cedula" => "", "id_logo" => $id_logo, "mensaje_morosos" => $mensaje_morosos));
     //Se busca el rfc en la base de datos. Si hay una empresa activa con el mismo rfc se lanza un error
     $empresas = EmpresaDAO::search(new Empresa(array("rfc" => $rfc, "activo" => 1)));
     if (!empty($empresas)) {
         Logger::error("Este rfc ya esta en uso por la empresa activa");
         throw new InvalidDataException("El rfc: " . $rfc . " ya esta en uso", 901);
     }
     /*
      * Se busca la razon social en la base de datos. 
      * Si hay una empresa activa con la misma razon zocial se lanza un error. 
      * Se usa trim para cubrir los casos "caffeina" y "    caffeina    ".
      */
     $empresas = EmpresaDAO::search(new Empresa(array("razon_social" => trim($razon_social), "activo" => 1)));
     if (!empty($empresas)) {
         Logger::error("La razon social: " . $razon_social . " ya esta en uso por la empresa: " . $empresas[0]->getIdEmpresa());
         throw new InvalidDataException("La razon social: " . $razon_social . " ya esta en uso", 901);
     }
     try {
         EmpresaDAO::save($empresa);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear la empresa: " . $e->getMessage());
         throw new Exception("No se pudo crear la empresa, consulte a su administrador de sistema", 901);
     }
     //verificamos si la moneda que se esta indicando exista
     if (!($moneda = MonedaDAO::getByPK($contabilidad->id_moneda))) {
         DAO::transRollback();
         Logger::error("Error : No existe la moneda indicada.");
         throw new InvalidDataException("Error : No existe la moneda indicada.", 901);
     }
     //creamos la configuracion de la moneda para esta empresa
     $moneda_base = new Configuracion(array("descripcion" => "id_moneda_base", "valor" => $contabilidad->id_moneda, "id_usuario" => "", "fecha" => time()));
     try {
         ConfiguracionDAO::save($moneda_base);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear la configuracion de la moneda base para la empresa: " . $e->getMessage());
         throw new Exception("No se pudo crear la configuracion de la moneda base para la empresa", 901);
     }
     //relacionamos la configuracion con la empresa que estamos creando
     $configuracion_empresa = new ConfiguracionEmpresa(array("id_configuracion" => $moneda_base->getIdConfiguracion(), "id_empresa" => $empresa->getIdEmpresa()));
     try {
         ConfiguracionEmpresaDAO::save($configuracion_empresa);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear la relacion entre la moneda base y la empresa: " . $e->getMessage());
         throw new Exception("No se pudo crear la relacion entre la moneda base y la empresa", 901);
     }
     //creamos la configuracion del tipo de cambio para esta empresa
     $tc = new Configuracion(array("descripcion" => "tipo_cambio", "valor" => "", "id_usuario" => "", "fecha" => time()));
     try {
         ConfiguracionDAO::save($tc);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear la configuracion del tipo de cambio para la empresa: " . $e->getMessage());
         throw new Exception("No se pudo crear la configuracion del tipo de cambio para la empresa", 901);
     }
     //relacionamos la configuracion con la empresa que estamos creando
     $conf_empresa = new ConfiguracionEmpresa(array("id_configuracion" => $tc->getIdConfiguracion(), "id_empresa" => $empresa->getIdEmpresa()));
     try {
         ConfiguracionEmpresaDAO::save($conf_empresa);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear la relacion entre el tipo de cambio y la empresa: " . $e->getMessage());
         throw new Exception("No se pudo crear la relacion entre el tipo de cambio y la empresa", 901);
     }
     //creamos los periodos necesarios
     $_p = 1;
     $_periodo = NULL;
     $_ejercicio = NULL;
     $_mes_inicial = 1;
     $_mes_final = 1;
     $_anio = date("Y");
     $_inicio = 0;
     $_fin = 0;
     for ($i = $contabilidad->duracion_periodo; $i <= 12; $i += $contabilidad->duracion_periodo) {
         //obtenemos la fecha inicial
         $_inicio = mktime(0, 0, 0, $_mes_inicial, 1, $_anio);
         //obtenemos la fecha final
         $_mes_final = $_mes_inicial * $_p;
         $_fin = mktime(23, 59, 59, $_mes_final, getUltimoDiaDelMes($_mes_final, $_anio), $_anio);
         //damos de alta los periodos
         try {
             $_periodo = new Periodo(array("periodo" => $_p, "inicio" => $_inicio, "fin" => $_fin));
             PeriodoDAO::save($_periodo);
         } catch (Exception $e) {
             DAO::transRollback();
             Logger::error("Error al crear los periodos : " . $e->getMessage());
             throw new Exception("Error al crear los periodos", 901);
         }
         //damos de alta el ejercicio
         if ($_p == $contabilidad->periodo_actual) {
             try {
                 $_ejercicio = new Ejercicio(array("anio" => $_anio, "id_periodo" => $_periodo->getIdPeriodo(), "inicio" => $_inicio, "fin" => $_fin, "vigente" => 1));
                 EjercicioDAO::save($_ejercicio);
             } catch (Exception $e) {
                 DAO::transRollback();
                 Logger::error("Error al crear el ejercicio : " . $e->getMessage());
                 throw new Exception("Error al crear el ejercicio", 901);
             }
         }
         $_mes_inicial = $_mes_final + 1;
         $_p++;
     }
     //relacionamos a la empresa con el ejercicio
     try {
         EjercicioEmpresaDAO::save(new EjercicioEmpresa(array("id_ejercicio" => $_ejercicio->getIdEjercicio(), "id_empresa" => $empresa->getIdEmpresa())));
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("Error al relacionar la empresa con el ejercicio: " . $e->getMessage());
         throw new Exception("Error al relacionar la empresa con el ejercicio", 901);
     }
     if (!empty($impuestos_compra)) {
         for ($i = 0; $i < count($impuestos_compra); $i++) {
             try {
                 ImpuestoEmpresaDAO::save(new ImpuestoEmpresa(array("id_empresa" => $empresa->getIdEmpresa(), "id_impuesto" => $impuestos_compra[$i])));
             } catch (Exception $e) {
                 Logger::warn("Error al guardar un impuesto de compra : " . $e->getMessage());
             }
         }
     }
     if (!empty($impuestos_venta)) {
         for ($i = 0; $i < count($impuestos_venta); $i++) {
             try {
                 ImpuestoEmpresaDAO::save(new ImpuestoEmpresa(array("id_empresa" => $empresa->getIdEmpresa(), "id_impuesto" => $impuestos_venta[$i])));
             } catch (Exception $e) {
                 Logger::warn("Error al guardar un impuesto de venta : " . $e->getMessage());
             }
         }
     }
     if (!empty($cuentas_bancarias)) {
         foreach ($cuentas_bancarias as $cuenta_bancarias) {
             //Pendiente hasta que se haga el SPEC de cuentas bancarias
         }
     }
     DAO::transEnd();
     //Creamos el catalogo de cuentas por default para esta nueva empresa
     ContabilidadController::NuevoCatalogoCuentasEmpresa($empresa->getIdEmpresa());
     Logger::log("Empresa creada exitosamente, id=" . $empresa->getIdEmpresa());
     return array("id_empresa" => (int) $empresa->getIdEmpresa());
 }
<?php

define("BYPASS_INSTANCE_CHECK", false);
require_once "../../../server/bootstrap.php";
$page = new GerenciaComponentPage();
//titulos
$page->addComponent(new TitleComponent("Nuevo almacen"));
//forma de nuevo almacen
$form = new DAOFormComponent(array(new Almacen()));
$form->hideField(array("id_almacen", "activo"));
//
//	$form->renameField( array(
//			"nombre" 			=> "razon_social",
//			"codigo_usuario"	=> "codigo_cliente"
//		));
$form->addApiCall("api/sucursal/almacen/nuevo/");
$form->onApiCallSuccessRedirect("sucursales.lista.almacen.php");
$form->makeObligatory(array("id_sucursal", "nombre", "id_empresa", "id_tipo_almacen"));
$form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::search(new Sucursal(array("activa" => 1))));
$form->createComboBoxJoin("id_empresa", "razon_social", EmpresaDAO::search(new Empresa(array("activo" => 1))));
$form->createComboBoxJoin("id_tipo_almacen", "descripcion", array_diff(TipoAlmacenDAO::getAll(), TipoAlmacenDAO::search(new TipoAlmacen(array("id_tipo_almacen" => 2)))));
$page->addComponent($form);
//render the page
$page->render();