private static function ObtenerEmpresasParaAsignacionVenta($detalle_producto = null, $detalle_paquete = null, $detalle_orden = null)
 {
     //inicializa los arreglos base
     $empresas = array();
     $id_empresas = array("id" => array(), "total" => array());
     //bandera que indica si se recibio alguno de los 3 detalles
     $parametro = false;
     //Para todos los detalles, se recorre el detalle recibido, se validan sus datos
     //y se buscan las empresas que tengan ese elemento. Despues se llama al metodo
     //InsertarIdEmpresa que se encarga de acomodar el arreglo de empresas y su total
     //correspondiente
     if (!is_null($detalle_producto)) {
         $parametro = true;
         $producto_empresa = new ProductoEmpresa();
         foreach ($detalle_producto as $d_p) {
             $producto_empresa->setIdProducto($d_p["id_producto"]);
             $productos_empresa = ProductoEmpresaDAO::search($producto_empresa);
             foreach ($productos_empresa as $p_e) {
                 self::InsertarIdEmpresa($p_e, $id_empresas, $d_p["precio"] * $d_p["cantidad"]);
             }
         }
     }
     if (!is_null($detalle_paquete)) {
         $parametro = true;
         $paquete_empresa = new PaqueteEmpresa();
         foreach ($detalle_paquete as $d_p) {
             $paquete_empresa->setIdPaquete($d_p["id_paquete"]);
             $paquetes_empresa = PaqueteEmpresaDAO::search($paquete_empresa);
             foreach ($paquetes_empresa as $p_e) {
                 self::InsertarIdEmpresa($p_e, $id_empresas, $d_p["precio"] * $d_p["cantidad"]);
             }
         }
     }
     if (!is_null($detalle_orden)) {
         $parametro = true;
         $servicio_empresa = new ServicioEmpresa();
         foreach ($detalle_orden as $orden) {
             $orden_de_servicio = OrdenDeServicioDAO::getByPK($orden["id_orden_de_servicio"]);
             $servicio_empresa->setIdServicio($orden_de_servicio->getIdServicio());
             $servicios_empresa = ServicioEmpresaDAO::search($servicio_empresa);
             foreach ($servicios_empresa as $s_e) {
                 self::InsertarIdEmpresa($s_e, $id_empresas, $orden["precio"]);
             }
         }
     }
     //Si no se recibio ningun detalle se arroja una excepcion
     if (!$parametro) {
         throw new Exception("No se recibio un id_producto ni un id_paquete ni un id_orden");
     }
     return $id_empresas;
 }
 /**
  *
  *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;
 }