Planes y cobros del equipo
Cómo los planes, complementos, límites y tarjetas se asocian al equipo, quién puede administrarlos y qué puede hacer un equipo sin plan.
Los planes, los precios por país e intervalo, los complementos, los límites, la página de pago y los formularios de administración funcionan igual que en cualquier producto de Weblabor. Ve Enciende los planes y los cobros y Crea un plan y ponle precio en el sitio de la base para todo eso. Esta guía cubre sólo lo que cambia cuando el cliente es un equipo.
El equipo es el cliente
Paga el equipo, no la persona. Cada equipo tiene su propia suscripción, sus propias tarjetas, sus propias facturas y sus propios complementos. Nada de los cobros se guarda en la persona, así que un miembro que sale del equipo no se lleva nada del plan del equipo.
Dónde lo administra el equipo
| Pantalla | Qué hace |
|---|---|
| Mis planes | Los planes, con el actual del equipo marcado. Un plan gratuito se contrata al momento; uno de pago abre la página de pago. |
| Complementos | El catálogo de complementos, con los activos del equipo. Cuando el equipo tiene consumo medido, sus saldos se muestran arriba del catálogo. |
| La página de un complemento | Todas las maneras de obtener ese complemento, el botón que lo obtiene y un enlace de regreso al catálogo del equipo. |
| Facturación | El estado de la suscripción, el siguiente pago, las facturas, el enlace para administrar los datos de pago, el saldo a favor del equipo cuando tiene, y el historial de su suscripción. |
| Métodos de pago | Las tarjetas del equipo. |
| Saldo pendiente | Lo que debe el equipo y el botón para liquidarlo. Al equipo se le manda aquí cuando debe dinero. |
Ninguna de estas pantallas requiere una suscripción, así que un equipo cuyo plan terminó, o que debe dinero, todavía puede llegar a ellas y pagar. El propietario y los roles con Administrar planes las ven; a los demás se les regresa al dashboard del equipo con un mensaje que les dice que pidan acceso a un administrador del equipo, y el menú ni siquiera les ofrece los enlaces. Para quienes administran planes, el grupo Facturación del menú del equipo muestra Complementos justo después de Mis planes siempre que los complementos estén encendidos y el catálogo del equipo tenga algo que mostrar. Con el catálogo vacío el enlace queda oculto.
Cada una de estas pantallas es del equipo, no de quien la abre. Un miembro que además paga una cuenta personal propia nunca cae en sus propias páginas de cobro desde dentro de un equipo: los complementos, sus páginas y el regreso de la página de pago se quedan en el equipo activo.
El plan gratuito
Cuando los planes están encendidos, a un equipo sin plan activo se le pone en el plan gratuito sin preguntar: cuando se crea el equipo, cuando termina su suscripción, después una vez al día mientras siga sin una, y cada vez que se abre su dashboard. El plan gratuito es el del país del equipo: el país guardado en el equipo, si no el de su propietario, si no el plan gratuito general. Nunca se adivina por el lugar desde donde se conecta el visitante.
El plan gratuito no está garantizado. Cuando no hay plan gratuito para el país del equipo, cuando el equipo usa más de lo que permite el plan gratuito, o cuando el plan gratuito no se pudo activar, el equipo se queda sin plan, y cada miembro ve un aviso que dice cuál de esas fue. Sólo quien administra el plan del equipo recibe Ir a planes; a los demás se les dice que quien administra el plan tiene que resolverlo.
Un equipo sin plan no recibe nada de uno: cada límite cuenta como cero. No se puede agregar ni invitar a nadie, y no se puede subir ningún archivo. Sus pantallas siguen abiertas, así que sus miembros, roles y archivos siguen al alcance. Cuando tu cuenta se queda sin plan en el sitio de la base explica cada razón y el camino de vuelta.
Límites que se cuentan por equipo
Los límites del plan se definen en el panel de administración. Un producto de equipos cuenta tres de entrada:
| Límite, como lo nombra el panel de administración | Qué cuenta |
|---|---|
| users | Los miembros del equipo más sus invitaciones pendientes. |
| activity_logs | Las entradas del historial de actividad registradas en el equipo en el mes actual. |
| Espacio en disco (disk_space) | El espacio que ocupan los archivos del equipo, en la unidad de espacio en disco de tu producto. Ve Archivos y espacio del equipo. |
El Dashboard del equipo muestra cada límite con lo que el equipo ha usado; ahí el límite users se llama Miembros. En el límite users el botón Crear miembro de la lista de miembros se deshabilita, y el formulario se niega otra vez al guardar.
Vender miembros más allá del plan
Un plan gratuito, un plan de pago con diez miembros incluidos y un complemento Miembro extra cobrado por unidad son tres registros que se crean en el panel de administración:
| Registro | Dónde | Qué poner |
|---|---|---|
| Plan gratuito | Los planes del panel de administración | Sin precio. En Capacidad y límites, users = 1. |
| Plan de pago | Los planes del panel de administración | Un precio mensual, digamos $20 USD. En Capacidad y límites, users = 10. |
| Miembro extra | Los complementos del panel de administración | Vendido por unidad encendido. En Límites, users = 1. Un precio mensual por unidad, digamos $1 USD. |
El límite se llama users, no "miembros", en el panel de administración. Vendido por unidad es lo que hace que la cantidad importe: el equipo elige cuántas quiere, y el precio y los límites se multiplican por ella. Un complemento que se vende por unidad tiene que llevar al menos un límite, que es para lo que está la fila users; no necesita ninguna capacidad, así que deja Capacidad vacía.
Cuando el producto vende sólo a equipos, los formularios de administración de planes, complementos y medidores no muestran el campo Contexto, y el complemento llega al catálogo del equipo tal cual. Ese campo aparece sólo cuando el producto vende a personas y a equipos, como describe la última sección de esta guía, y ahí eliges Equipo.
Una vez que existen los tres registros, un equipo en el plan de pago con cuatro unidades de Miembro extra tiene catorce lugares. Agregar a un decimoquinto miembro, o invitarlo, se rechaza con "Has alcanzado el número máximo de miembros permitido por tu suscripción". El equipo lo supera comprando más unidades desde Complementos o pasándose a un plan más grande, y los lugares nuevos cuentan desde ese momento. Una invitación pendiente ocupa un lugar igual que un miembro activo, y quien creó el equipo ya ocupa uno, que es la razón por la que un equipo en el plan gratuito de este ejemplo no puede invitar a nadie hasta que compre una unidad.
Vender por unidad funciona igual en todos lados, y está documentado en Vende complementos, en "Por unidad y por escalones".
Complementos y capacidades
Un complemento enciende una capacidad para el equipo: una función que el equipo puede usar en cuanto compra el complemento, o en cuanto su plan lo incluye. El administrador elige la capacidad en el formulario del complemento, de la lista que declara tu producto. Una capacidad comprada de por vida sigue encendida aunque el plan deje de incluir el complemento.
Desde el panel de administración
Equipos, en el panel de administración, muestra cada equipo con su plan y deja que un administrador encienda o apague un complemento para él, le fije un límite propio, le acuerde un precio menor, le abone saldo o lea el historial de su suscripción, desde los mismos paneles que se usan para las personas. Ve Equipos en el panel de administración.
Vender a personas y a equipos
Un producto puede vender a personas y a equipos al mismo tiempo. Entonces las páginas de cobro de la persona regresan a su cuenta, las del equipo se quedan para el equipo, y cada plan, complemento y medidor declara en su formulario de administración, bajo Contexto, si es para usuarios (Usuario), para equipos (Equipo) o para ambos (Ambos).
Para desarrolladores
-
El adaptador de equipos es
packages/billing-team, junto apackages/billing-corede la base. La base le cobra a unUser; este adaptador le cobra a unTeam, con su propia filaBillingAccount, su cliente de Stripe, su suscripción y sus derechos.BILLING_TEAM_ENABLED=true BILLING_USER_ENABLED=falseBILLING_TEAM_ENABLEDregistra el adaptador de equipos.BILLING_USER_ENABLEDregistra junto a él el adaptador de usuarios de la base, que sólo quieres cuando tu producto vende a personas y a equipos; tal como viene está apagado, así que/account/plansy las demás páginas de cobro de la cuenta no existen.FEATURE_PLANS_ENABLEDyFEATURE_ADDONS_ENABLEDsiguen encendiendo o apagando los planes y los complementos para todos. El campo Contexto de los formularios de planes, complementos y medidores se dibuja sólo cuando hay dos o más adaptadores de cobro registrados (BillingManager::contextOptions()no devuelve nada en otro caso), así que aparece en los tres formularios cuando el adaptador de usuarios se registra junto al del equipo, y en ninguno con el adaptador de equipos solo. -
Las pantallas del equipo son
/team/plans,/team/add-ons,/team/add-ons/{addon},/team/billing,/team/payment-methodsy/team/debt, detrás demanage plansen el guardteam. El enlace Complementos se muestra cuando el catálogo tiene un complemento vendido en el país del equipo o con precio para todos los países, o un medidor. -
El plan gratuito se aplica cuando se crea el equipo (
TeamObserver::created()llama aTeam::returnToFreePlan()), cuando termina la suscripción, con una revisión diaria, y cuando se abre/team. -
Lo que cuenta cada límite está en
app/Classes/TeamPlanLimits.php, la versión del equipo dePlanLimitsde la base; el panel lista los nombres de sus métodos tal como están escritos. Agrega un método público por cada límite que necesite tu producto (users,activity_logsydisk_spacevienen incluidos), con la clave como nombre y el equipo actual como argumento opcional, y una varianteDailycuando lo quieras en las gráficas de uso:public function projects(?object $owner = null) { $team = $owner ?? team(); return $team ? $team->projects()->count() : 0; }team()->reachedLimit('users')responde si el equipo está en el límite; la lista de miembros lo llama para deshabilitar Crear miembro, y el formulario para agregar miembros lo llama otra vez antes de guardar. -
Las capacidades que puede comprar un equipo son métodos públicos de
app/Classes/TeamPlanFeatures.php, la versión del equipo dePlanFeaturesde la base; el nombre del método es la clave que elige el administrador, y el método responde si la capacidad está liberada en código. La clase viene vacía, así que declara una antes de crear un complemento para equipos:public function advancedReports() { return true; }Revísala con
team()->hasFeature('advancedReports'), un sinónimo permanente deteam()->hasAddOn(): la misma llave, la misma respuesta desde las mismas fuentes. Teams agrega el mismo sinónimo en el usuario, así que$user->hasFeature()le pregunta igual al plan propio de una persona, y ninguno de los dos nombres lee la cachéfeatures. Una política no la llama: declaraprotected $requiredFeatureen la política yApp\Policies\BasePolicyrevisa por sí misma los derechos del equipo para esa clave, antes de que corra cualquiera de los métodos propios de la política. Un visitante sin equipo actual es rechazado ahí: sin equipo no hay derechos que leer. La columnafeaturesdel equipo es un caché que la cuenta de cobro mantiene al día; la decisión siempre es de los derechos de la cuenta. -
El recurso de equipos del panel es
/admin/teams.
