public function testBuscarProductosPorID_Sucursal()
 {
     $dir_suc = self::RandomString(25, FALSE, FALSE, FALSE);
     $desc = self::RandomString(10, FALSE, FALSE, FALSE);
     $sucursal = SucursalesController::Nueva($descripcion = $desc, $direccion = $dir_suc, $id_tarifa = 1);
     $this->assertInternalType("int", $sucursal['id_sucursal'], "---- 'testBuscarProductosPorID_Sucursal' 'id_sucursal' NO ES UN ENTERO");
     $empresa_rfc = self::RandomString(13, FALSE, FALSE, FALSE);
     $empresa_razon = self::RandomString(10, FALSE, FALSE, FALSE);
     $contabilidad['id_moneda'] = 1;
     $contabilidad['ejercicio'] = "2013";
     $contabilidad['periodo_actual'] = 1;
     $contabilidad['duracion_periodo'] = 1;
     $empresa = EmpresasController::Nuevo((object) $contabilidad, $direccion = array(array("calle" => "Monte Balcanes", "numero_exterior" => "107", "colonia" => "Arboledas", "id_ciudad" => 334, "codigo_postal" => "38060", "numero_interior" => null, "referencia" => "Calle cerrada", "telefono1" => "4616149974", "telefono2" => "45*451*454")), $razon_social = $empresa_razon, $rfc = $empresa_rfc);
     $this->assertInternalType("int", $empresa['id_empresa'], "---- 'testBuscarProductosPorID_Sucursal' 'id_empresa' NO ES UN ENTERO");
     //se crea un nuevo producto
     $codigo_p = self::RandomString(5, FALSE, FALSE, FALSE);
     $nombre_p = self::RandomString(15, FALSE, FALSE, FALSE);
     $p = ProductosController::Nuevo($activo = true, $codigo_producto = $codigo_p, $compra_en_mostrador = true, $id_unidad_compra = 1, $metodo_costeo = "costo", $nombre_producto = $nombre_p, $visible_en_vc = true, $codigo_de_barras = null, $control_de_existencia = null, $costo_estandar = 10, $descripcion_producto = null, $foto_del_producto = null, $garantia = null, $id_categoria = null, $id_empresas = array($empresa['id_empresa']), $id_unidad = null, $impuestos = null, $precio_de_venta = 12);
     //TODO: En un futuro desaparecera esto ya que por instancia lo correctro es que haya una sola empresa y todas als sucursales perteneceran a la empresa
     ProductoEmpresaDAO::save(new ProductoEmpresa(array("id_producto" => $p["id_producto"], "id_empresa" => $empresa['id_empresa'])));
     SucursalEmpresaDAO::save(new SucursalEmpresa(array("id_sucursal" => $sucursal['id_sucursal'], "id_empresa" => $empresa['id_empresa'])));
     $res = ProductosController::Buscar($query = null, $id_producto = null, $id_sucursal = $sucursal['id_sucursal']);
     $this->assertInternalType("int", $res["numero_de_resultados"], "---- 'testBuscarProductosPorID_Sucursal' 'numero_de_resultados' NO ES UN ENTERO");
     $this->assertGreaterThan(0, $res['numero_de_resultados'], "---- 'testBuscarProductosPorID_Sucursal' SE DEBIÓ DE ENCONTRAR ALMENOS 1 RESULTADO CON NOMBRE PRODUCTO: " . $nombre_p);
 }
 /**
  *
  *Relacionar una sucursal a esta empresa. Cuando se llama a este metodo, se crea un almacen de esta sucursal para esta empresa
  *
  * @param id_empresa int 
  * @param sucursales json Arreglo de objetos que tendran los ids de sucursales, un campo opcional de  margen de utilidad que simboliza el margen de utilidad que esas sucursales ganaran para los productos de esa empresa y un campo de descuento, que indica el descuento que se aplicara a todas los productos de esa empresa en esa sucursal
  **/
 public static function Agregar_sucursales($id_empresa, $sucursales)
 {
     //Se valida que la empresa exista en la base de datos
     $validar = self::validarParametrosEmpresa($id_empresa);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new Exception($validar, 901);
     }
     //Se valida el objeto sucursales
     $sucursales = object_to_array($sucursales);
     if (!is_array($sucursales)) {
         Logger::error("El parametro sucursales recibido es invalido");
         throw new Exception("El parametro sucursales recibido es invalido", 901);
     }
     //Se crea un registro de sucursal-empresa y se le asigna como empresa la obtenida.
     $sucursal_empresa = new SucursalEmpresa();
     $sucursal_empresa->setIdEmpresa($id_empresa);
     DAO::transBegin();
     try {
         //Por cada una de las sucursales como sucursal, se validan los parametros que contiene
         //y si son v'alidos, se almacenan en el objeto sucursal-empresa para luego guardarlo.
         foreach ($sucursales as $sucursal) {
             $validar = self::validarParametrosSucursalEmpresa($sucursal);
             if (is_string($validar)) {
                 throw new Exception($validar, 901);
             }
             $sucursal_empresa->setIdSucursal($sucursal);
             SucursalEmpresaDAO::save($sucursal_empresa);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudieron agregar las sucursales a la empresa: " . $e);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudieron agregar las sucursales a la empresa: " . $e->getMessage(), 901);
         }
         throw new Exception("No se pudieron agregar las sucursales a la empresa, consulte a su administrador de sistema", 901);
     }
     DAO::transEnd();
     Logger::log("Sucursales agregadas exitosamente");
 }