Season sponsors

Global catalogue, configuration, objectives, and seasonal sponsor contracts.

# Season sponsors

Season sponsors add economic choices and sporting objectives to team management. Administrators prepare sponsors during new season, while each manager may subscribe to contracts exclusively during the first transfer-market phase.

# Season configuration

The Season sponsors entry is available from Manage season, alongside limits, wages, and market sessions. During new season, an administrator must choose whether to:

  • disable sponsors for the season;
  • enable them and complete the levels, seasonal sponsors, and objectives.

Disabling sponsors counts as a complete configuration. When sponsors are enabled, there must be a transfer-market session, at least one active level, and at least one active, confirmed seasonal sponsor for every active level. Until this setup is complete, the season cannot start.

# Global and league catalogues

The catalogue distinguishes two types of sponsor:

  • global sponsors, such as Nike or Adidas, are created and managed only by the super-admin and are visible in every league;
  • league sponsors are created by league administrators and remain available only in that league.

A global sponsor exists only once in the database: leagues directly use its name and logo instead of creating copies. Updating that identity as a super-admin therefore updates what every league inherits. A league administrator may still provide a season-specific description when configuring the sponsor.

Archiving a global sponsor prevents it from being used in new configurations, but does not cascade-delete seasonal sponsors or contracts that already reference it. They continue to display the archived identity and can still be settled.

League sponsors are created and edited in a side panel. The league catalogue and seasonal configuration can be changed only during new season; the global catalogue remains under the super-admin’s exclusive control.

Interactive logo uploads open a crop editor as soon as a file is selected. Sponsor logos must be confirmed as square 1:1 images before saving; the crop can be reopened while editing the form. Existing stored logos are not modified automatically.

# Levels and seasonal sponsors

Levels group independent alternatives and do not have custom names: the interface displays Level 1, Level 2, and so on. Each level defines its own maximum number of failed objectives, and each manager may choose at most one sponsor per level.

A new seasonal sponsor links a catalogue sponsor to a level and defines its initial bonus, completion bonus, penalty, seasonal description, and objectives. It has no separate name or logo and always uses the catalogue identity. Creation and editing also take place in a side panel.

An administrator must confirm a draft before managers can see it. Once the season starts, settings, levels, and seasonal sponsors become immutable even if no manager has subscribed yet.

# Objectives and compatible tournaments

Sponsors can reward:

  • winning a tournament;
  • reaching a minimum number of goals, points, or wins;
  • scoring the most goals or earning the most wins;
  • conceding the fewest goals;
  • staying within a maximum number of losses;
  • finishing at or above a configured position;
  • reaching a knockout stage.

Objectives have no free-text description: they automatically display the criterion and only its required parameters. Their scope can be the primary competitive tournament, one specific tournament, or all competitive tournaments when the criterion supports it. Each objective has its own reward.

Only competitive tournaments already created in the current season and whose structure supports the criterion may be selected. Final position is available for Round Robin competitions and cannot exceed the participant count. Reaching a stage is available only for knockout or multistage tournaments and offers only stages that actually exist in the structure. The server repeats all these checks when a configuration is saved or confirmed.

# Subscription during the first market

There is no administrator-defined date window. Selection is available exclusively during the first transfer-market phase and stops as soon as the season moves to the next phase. A team sees only active, confirmed sponsors whose objectives are compatible with tournaments in which it participates.

Before confirming, the manager sees the amounts, objectives, and failed-objective threshold for that offer’s level. Different levels may therefore have different thresholds. The choice is final and the selected level’s threshold is stored in the contract snapshot, so the contract’s economic rules cannot change after subscription. The logo remains linked to the catalogue identity.

# Contract economics

  • The initial bonus is credited immediately after subscription.
  • Objective rewards are added for achieved, evaluable objectives.
  • The completion bonus is added when failed objectives do not exceed the configured threshold.
  • If the threshold is exceeded, the contract’s penalty applies instead.

# Automatic settlement

There is no administrator settlement page. When advancement moves the season into its closing phase, the SeasonAdvance pipeline evaluates and automatically settles every open contract before creating the new season.

The operation is atomic and idempotent: either every contract can be settled or the whole advancement is rolled back. An objective that is still pending blocks closing; once tournament results are completed or corrected, the administrator can simply retry advancement. Objectives that cannot be evaluated are excluded from the count, and a contract with no evaluable objectives closes with a final balance of zero.

The history retains the snapshot, results, economic movements, and final balance for every contract.

# Bulk import of global sponsors

The simplest way to load many names and logos is GlobalSponsorSeeder:

  1. copy the files into database/data/global-sponsors;
  2. use the sponsor name as the filename, for example Nike.png, Adidas.webp, or Jeep.jpg;
  3. run php artisan db:seed --class=GlobalSponsorSeeder.

PNG, JPG/JPEG, and WebP are supported. Unlike interactive uploads, bulk import deliberately accepts logos of any aspect ratio and does not crop them. The seeder validates every file before writing, uses the filename without its extension, compares names case-insensitively, and preserves the original files. It is safe to rerun: existing sponsors and logos are not overwritten, and archived sponsors are not restored.

After importing, every sponsor remains fully editable through the super-admin CRUD. Since idempotency is name-based, it is best to rename sponsors in the CRUD only after completing the initial import; rerunning an old file under the previous name would create a new sponsor.