Files
myep-team/config/services.yaml
T
2026-08-31 16:26:53 +02:00

333 lines
12 KiB
YAML

parameters:
bpn_crm_id_admin: '%env(int:APP_BPN_CRM_ID_ADMIN)%'
bpn_crm_id_manager: '%env(int:APP_BPN_CRM_ID_MANAGER)%'
bpn_crm_id_teamer: '%env(int:APP_BPN_CRM_ID_TEAMER)%'
bpn_default_hotel_code: '%env(default::APP_BPN_DEFAULT_HOTEL_CODE)%'
# BusPro CRM selection id => hotel code. A person holding a selected attribute from this
# list is a house manager for that house. Matched by id and not by the "Hausleitung XXX"
# label, so renaming a selection in BusPro cannot silently grant or revoke a house.
# The commented entries are BusPro selections whose code is not a house in the "houses"
# parameter below: granting them would let someone in who then sees no assignments and
# no dispositions at all. Uncomment one once its house exists. The reverse gap is fine -
# not every house has a selection.
bpn_crm_house_manager_ids:
1299: 'SSL'
1300: 'SST'
1301: 'MVK'
# 1302: 'ASB'
1303: 'LPJ'
1304: 'DKS'
1305: 'DGS'
1306: 'DPW'
1307: 'DKI'
1308: 'DWW'
1309: 'PMV'
# 1352: 'ASG'
1371: 'ASC'
1373: 'PCJ'
1374: 'SBW'
# 1375: 'UCH'
# 1376: 'SZO'
1377: 'KHH'
1459: 'SVS'
1461: 'SHM'
1462: 'AGR'
default_email_from: '%env(APP_DEFAULT_EMAIL_FROM)%'
default_email_to: '%env(APP_DEFAULT_EMAIL_TO)%'
teamer_inactive_period: '-2 years'
# The contract upload period, counted from the creation of the disposition. This is the
# single definition: the reminder mail, the "Honorarvertrag fällig" flag on the teamer
# dashboard, the admin list of overdue contracts and the wording of the mails all read it,
# so they cannot mark the same disposition due on three different days.
contract_upload_deadline_days: 5
# The invoice upload period, counted from the end of the assignment. The teamer is
# reminded the day after the assignment ends and again on the last day of this period.
invoice_upload_deadline_days: 14
# Messenger transport the mails of a teamer mailing are queued on. An X-Bus-Transport
# header wins over the routing in messenger.yaml (see SendersLocator::getSenders),
# so this is what keeps a mailing off the shared queue - and what has to be switched
# back to "sync" further down, or a mailing would need a running worker to arrive
# in dev and test while every other mail is sent right away.
mailing_bus_transport: 'mailing'
# Dates (MM-DD) on which teamers must re-confirm their personal data.
personal_data_check_deadlines:
- '04-01'
- '10-01'
# The season window as MM-DD. It wraps the turn of the year and is named after the
# calendar year it starts in ("Saison 2024/25"). The teamer info modal buckets a
# teamer's dispositions by the season their assignment starts in; one whose
# assignment starts outside this window is counted as "außerhalb der Saison".
season_start: '11-01'
season_end: '04-01'
# Houses, hotel code: name. The name is used both as a label and to match
# destination.hotel, the code to match destination.hotelCode.
houses:
AGR: 'Rotbach'
ASC: 'Christiler'
DGS: 'Spinabad'
DKI: 'Schwendi'
DKS: 'Schweizerhaus'
DPW: 'Waldschlössli'
DWW: 'Weißfluh'
KHH: 'Heuberghaus'
L2A: 'Les Deux Alpes'
LPJ: 'Jenatsch'
MVK: 'Klein Tirol'
PCJ: 'Jolimont'
PMV: 'Victoria'
SBW: 'Val Thorens'
SHM: 'Mitterlengau'
SRR: 'Ranalt'
SSL: 'Lederer'
SST: 'Steinachhof'
SVS: 'Silvana'
services:
_defaults:
autowire: true
autoconfigure: true
bind:
$tempDir: '%kernel.project_dir%/temp'
# Application audit channel, not a MyE&P one: this is what feeds the
# log table via App\Logging\DatabaseHandler. Unbinding a service from
# it drops its records from that table.
$logger: '@monolog.logger.audit'
$houses: '%houses%'
$xmlExport: '@xml_export.storage'
$xmlDump: '@xml_dump.storage'
$teamerInactivePeriod: '%teamer_inactive_period%'
$contractUploadDeadlineDays: '%contract_upload_deadline_days%'
$invoiceUploadDeadlineDays: '%invoice_upload_deadline_days%'
# Only the path enters the container - the file itself is parsed on demand by
# App\Config\EmailTextCatalog, since its contents matter on few requests.
$emailTextsFile: '%kernel.project_dir%/config/email_texts.yaml'
$mailingBusTransport: '%mailing_bus_transport%'
$seasonStart: '%season_start%'
$seasonEnd: '%season_end%'
# Tagged by interface rather than listed by hand: order between collectors is
# irrelevant, so the only thing an explicit list could add here is the chance to
# forget one, which would silently stop a metric being recorded.
_instanceof:
App\Service\Statistics\Collector\StatisticsCollectorInterface:
tags: ['app.statistics_collector']
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
Liip\ImagineBundle\Imagine\Cache\Resolver\FormatExtensionResolver:
arguments:
- '@liip_imagine.cache.resolver.default'
- '@liip_imagine.filter.configuration'
tags:
- name: liip_imagine.cache.resolver
resolver: format_extension
App\Command\BpnImportCommand:
arguments:
$connection: '@doctrine.dbal.default_connection'
App\Command\DbAnonymizeCommand:
arguments:
$environment: '%kernel.environment%'
App\Service\Common\DatabaseAnonymizer:
arguments:
$connection: '@doctrine.dbal.default_connection'
App\BusProNet\ApiClient:
arguments:
$logger: '@monolog.logger.bpn'
$options:
bpn_username: '%env(APP_BPN_USER)%'
bpn_password: '%env(APP_BPN_PASSWORD)%'
bpn_api_ip: '%env(APP_BPN_IP)%'
bpn_api_port: '%env(APP_BPN_PORT)%'
debug: '%env(bool:APP_BPN_DEBUG)%'
App\BusProNet\ResponseParser:
arguments:
$options:
bpn_crm_id_admin: '%bpn_crm_id_admin%'
bpn_crm_id_manager: '%bpn_crm_id_manager%'
bpn_crm_id_teamer: '%bpn_crm_id_teamer%'
bpn_crm_house_manager_ids: '%bpn_crm_house_manager_ids%'
bpn_default_hotel_code: '%bpn_default_hotel_code%'
App\Twig\AppRuntime:
arguments:
$intlExtension: '@twig.extension.intl'
$environment: '%kernel.environment%'
App\Logging\InjectUserProcessor:
arguments:
- '@security.helper'
tags:
- name: monolog.processor
App\Logging\RequestInfoProcessor:
arguments:
- '@request_stack'
tags:
- name: monolog.processor
App\Menu\MenuBuilder:
arguments:
$factory: '@knp_menu.factory'
tags:
- name: knp_menu.menu_builder
method: createMainMenu
alias: default_main
- name: knp_menu.menu_builder
method: createTeamerMenu
alias: default_teamer
App\Menu\AdminMenuBuilder:
arguments:
$factory: '@knp_menu.factory'
tags:
- name: knp_menu.menu_builder
method: createMainMenu
alias: admin_main
- name: knp_menu.menu_builder
method: createTeamerMenu
alias: admin_teamer
App\Menu\ManagerMenuBuilder:
arguments:
$factory: '@knp_menu.factory'
tags:
- name: knp_menu.menu_builder
method: createMainMenu
alias: manager_main
- name: knp_menu.menu_builder
method: createTeamerMenu
alias: manager_teamer
App\Menu\TeamerMenuBuilder:
arguments:
$factory: '@knp_menu.factory'
tags:
- name: knp_menu.menu_builder
method: createMainMenu
alias: teamer_main
App\Menu\HouseManagerMenuBuilder:
arguments:
$factory: '@knp_menu.factory'
tags:
- name: knp_menu.menu_builder
method: createMainMenu
alias: house_manager_main
App\Service\Upload\UploadHandler:
arguments:
$orphanageManager: '@oneup_uploader.orphanage_manager'
$projectDir: '%kernel.project_dir%'
$environment: '%kernel.environment%'
$uploadReplacementFile: '%env(default::UPLOAD_REPLACEMENT_FILE)%'
App\Service\Pdf\Sanitizer:
arguments:
$binGs: '%env(BIN_GS)%'
$binConvert: '%env(BIN_CONVERT)%'
App\EventListener\UploadSessionListener:
tags:
- name: kernel.event_listener
event: oneup_uploader.post_upload
method: onUpload
App\EventListener\UploadSessionValidationListener:
tags:
- name: kernel.event_listener
event: oneup_uploader.validation
method: onValidate
App\EventListener\DatevEmailSubscriber:
arguments:
$datevEmailRecipient: '%env(DATEV_EMAIL_RECIPIENT)%'
$datevEmailSender: '%env(DATEV_EMAIL_SENDER)%'
App\EventListener\StatisticsChangeSetListener:
arguments:
$collectors: !tagged_iterator app.statistics_collector
App\RequiredTeamerCheck\RequiredTeamerCheckRegistry:
arguments:
# Presentation order only. Each check must point at a page that clears
# that check alone, so a teamer can always work through them whatever
# the order — never make correctness depend on this list.
$checks:
- '@App\RequiredTeamerCheck\DriverLicenseRequiredCheck'
- '@App\RequiredTeamerCheck\FinancialDataRequiredCheck'
- '@App\RequiredTeamerCheck\PersonalDataVerificationRequiredCheck'
- '@App\RequiredTeamerCheck\MealPreferenceRequiredCheck'
App\RequiredTeamerCheck\PersonalDataVerificationRequiredCheck:
arguments:
$deadlines: !service
class: App\RequiredTeamerCheck\RecurringDeadlines
arguments:
$deadlines: '%personal_data_check_deadlines%'
app.upload_namer:
class: App\Service\Upload\UploadNamer
public: true
App\Service\Pdf\ContractRenderer:
arguments:
$options:
project_dir: '%kernel.project_dir%'
App\Service\Pdf\InvoiceApprover:
arguments:
$options:
project_dir: '%kernel.project_dir%'
App\Service\Pdf\InvoiceRenderer:
arguments:
$options:
project_dir: '%kernel.project_dir%'
App\Email\Mailer:
arguments:
$defaults:
from: '%default_email_from%'
to: '%default_email_to%'
App\Security\OAuth2\MyEpClient:
arguments:
$options:
myep_oauth2_client_id: '%env(MYEP_OAUTH2_CLIENT_ID)%'
myep_oauth2_client_secret: '%env(MYEP_OAUTH2_CLIENT_SECRET)%'
myep_oauth2_url_authorize: '%env(MYEP_OAUTH2_URL_AUTHORIZE)%'
myep_oauth2_url_access_token: '%env(MYEP_OAUTH2_URL_ACCESS_TOKEN)%'
myep_oauth2_url_resource_owner_details: '%env(MYEP_OAUTH2_URL_RESOURCE_OWNER_DETAILS)%'
myep_oauth2_scopes: '%env(csv:MYEP_OAUTH2_SCOPES)%'
# The mails of a mailing are sent right away here, like every other mail, instead of
# waiting for a worker on the dedicated queue. The mailer transport is deliberately not
# switched: a mailing still goes out over MAILING_MAILER_DSN, so the path being exercised
# locally is the one that runs in production.
when@dev:
parameters:
mailing_bus_transport: 'sync'
when@test:
parameters:
mailing_bus_transport: 'sync'