Lue dans les fichiers PHP du paquet au commit cb07b7c8bf33 : ses espaces de noms, classes, interfaces et énumérations, leurs constantes, propriétés et méthodes publiques avec leur PHPDoc, et les options que prennent ses fabriques. Rien n’en est exécuté.
EstateBundleclassProperty management on top of omnibase: the organisations that own or manage homes (an SCI, an agency), their buildings and units, their associates, leases and tenants, rent calls and receipts, contractors and work orders - and a private space for each of those people.
3 methods
OverviewWidgetTypeclassThe company at a glance, first on the dashboard: what is let, the rents of the year called and received, what is late, what the works cost, the last six months side by side - and what waits: rents to collect, work orders to give, applications to look at, rents to revise, tenants' messages to answer, insurance certificates missing or run out.
4 methods
PaymentsWidgetTypeclassMoney in: the latest rents received and how - transfer, card or SEPA debit through omnitrade - the month's total per way, and whether online payment is on.
4 methods
ApplicationPurgeCommandclassApplications decided (accepted or declined) more than three months ago, deleted - the CNIL's guidance for applicants' files: cron, daily.
1 method
CompanyRefreshCommandclassEvery company's identity read again from the registers (Sirene / RNE, VIES), by its SIREN: cron, weekly.
1 method
RentCallCommandclassThe month's rents called (and their notices sent): cron, on the 25th for the next month. Run twice, it calls nothing twice.
1 method
RentLateCommandclassRents past due marked late, and their tenants reminded once (estate.reminder_days after the due date): cron, daily.
1 method
ActionControllerclassThe back office's buttons that are not a plain form: invite someone to their space, call the month's rents, record a payment, give a work order to a contractor, close it, send a notice to the tenants, read a company from the registers.
10 methods
MessageControllerclassThe management's side of the tenants' messages: every lease's thread, the latest first with its unread count, and a thread to read and answer - the answer is e-mailed to the lease's tenants and shown in their space.
3 methods
Base\Estate\Controller\Admin\Crud
AbstractEstateCrudControllerclassThe estate screens' shared pieces: an enum as a select, euros stored as cents, the actions' tokens.
4 methods
ActivityCrudControllerclass4 methods
ApplicationCrudControllerclassThe applications to rent the free homes, the newest first: who, their income against the rent, their guarantee, their DossierFacile file - and the steps: shortlist, invite to visit, decline, accept (the lease follows).
5 methods · 3 constants
AssociateCrudControllerclassThe associates: their shares, and the access to their space, by invitation.
4 methods
BuildingCrudControllerclass3 methods
ContractorCrudControllerclass4 methods
DeadlineCrudControllerclass3 methods
DocumentCrudControllerclassThe homes' and leases' documents: the signed lease, the inventory of fixtures, the diagnostics, the building's rules - shared with the tenants or kept for the management - and what tenants and contractors send (insurance certificates, quotes, invoices, photos).
5 methods
InvitationCrudControllerclass4 methods
LeaseCrudControllerclassThe leases: who, which home, the rent and its index, the insurance - and the yearly rent revision.
4 methods · 2 constants
LeasePartyCrudControllerclassThe people on the leases; a tenant gets their space by invitation.
4 methods
MemberCrudControllerclassThe management team: who runs the back office. Invited by e-mail.
4 methods
NoticeCrudControllerclass4 methods
OrganisationCrudControllerclassThe companies: their identity, their address, the IBAN rents are paid to, their books.
4 methods
PaymentCrudControllerclass4 methods
RentCallCrudControllerclassThe rents called: read-only, settled by "Encaisser" (a payment) or by the bank reconciliation.
4 methods · 1 constant
UnitCrudControllerclassThe homes: what they are, what they cost, whether they are on the public site and when they are free.
3 methods · 1 constant
UnitPhotoCrudControllerclass3 methods
WorkOrderCrudControllerclassThe work orders: "Confier" gives one to a contractor (and tells them), "Clôturer" sends its invoice to the books.
4 methods · 2 constants
AssociateControllerclassThe associates' space: the company's activity as it happens - what is let and what is free, rents called and received, what is late, works and their cost, the next deadlines, the day-to-day, the documents - and, with omnibase/ledger, its accounts: the year's result and each one's share, the bank. Read-only.
2 methods
ContractorControllerclassThe contractor's space: the jobs given to them, and for each the address, how to get in, who lives there, the timeline - and a form to say when they come, what it costs, what they did.
3 methods
DocumentControllerclassA document's file, streamed to whoever may open it (EstateVoter::DOCUMENT_VIEW): the uploads stay out of public/.
1 method
InvitationControllerclassAn invitation's link: a new account (a username, a password), or - signed in already, or with an account for that address - the account attached.
1 method
TenantControllerclassThe tenant's space: their lease, its rents (to pay online, their notices and receipts to download, a certificate of rent up to date), the lease's documents and their insurance certificate, their messages with the management, the problems they reported and a form to report one, the notices of their building.
6 methods
UnitControllerclassThe public site's homes: the published units, each one's page with a visit request and, free, its application form.
3 methods
Base\Estate\DependencyInjection
EstateConfigurationclass1 method
EstateExtensionclass2 methods
ActivityclassA line of the company's day-to-day, as its associates read it: a rent paid, a boiler replaced.
9 methods
ApplicationclassSomeone applying to rent a free home, from its page: who they are, how many they would be, when they would move in, their situation and income, their guarantee, and the link to their file on DossierFacile (the State's service: identity papers, payslips and tax notice verified there, never sent to the site). Kept three months after the home is let or the application declined (Applications::purge, as the CNIL recommends), then deleted.
41 methods
AssociateclassA partner of the company: their shares, their quality, and - once they accepted their invitation - the account that opens the associates' space.
29 methods
BuildingclassA building some units are in: its address, its year, its common parts.
17 methods
ContractorclassA tradesperson the organisation calls on: their company, their trade, and their account once invited.
21 methods
DeadlineclassA date the company must not miss: the property tax, the general meeting, an insurance renewal.
14 methods
DocumentclassA file of the company's records, attached to what it is about: a home (its diagnostics, the building's rules), a lease (the signed lease, the inventory of fixtures, the tenant's insurance certificate) or a work order (the contractor's quote, invoice and photos). Who may open it follows from that (EstateVoter::DOCUMENT_VIEW): the management and the associates always, the tenants of the lease or of the home when it is shared with them, the contractor of the work order.
26 methods
InvitationclassAn e-mail that opens a space: whoever follows its link before it runs out gets an account (or signs in with theirs), attached to what it was made for - an associate, a lease's party, a contractor, the management team.
6 methods
LeaseclassA lease of a unit: who lives there (LeaseParty), from when, for how much, on which day the rent is due. Its rent calls are made each month from it.
44 methods
LeasePartyclassSomeone on a lease: a tenant, a co-tenant, a guarantor - and, once invited, their account.
20 methods
MemberclassSomeone of the management team of an organisation: they run its back office.
13 methods
MessageclassA message between a lease's tenants and the management - one thread per lease, in the tenant's space and in the back office (Messages), each new one sent by e-mail to the other side.
10 methods
NoticeclassA word to the tenants of a building, or of all the units: a water cut, works on the stairs.
14 methods
OrganisationclassWho owns or manages the homes: an SCI, an agency. Everything else belongs to one; its management team (Member), its associates and its books (omnibase/ledger's Book, by id) hang from it.
34 methods
PaymentclassMoney received for a rent call: a transfer seen at the bank, a card or SEPA payment online, a cheque.
8 methods
RentCallclassA month's rent asked of a lease (the avis d'échéance): rent and charges, due on the lease's day, settled by payments. Paid in full, its receipt (quittance) is numbered and can be downloaded.
28 methods
UnitclassA home the organisation lets: a house, a flat, a studio, a parking space, premises. Published, it is on the public site with its photos, what it costs and when it is free; its façade colour paints it until a photo is in.
67 methods
UnitPhotoclassA photograph of a unit, in its gallery's order.
11 methods
WorkOrderclassSomething to fix in a unit: reported by its tenant or the management, given to a contractor, visited, quoted, done, closed. Each step is a line of its timeline (WorkOrderEvent), and each tells the people concerned.
36 methods
WorkOrderEventclassA line of a work order's timeline: a step, or a note from whoever follows it.
9 methods
ActivityKindenum1 method · 11 cases
ApplicationStatusenumWhere an application stands: received, shortlisted, invited to visit, accepted (a lease follows) or declined.
1 method · 5 cases
AssociateQualityenum2 cases
DocumentKindenumWhat a document is: the lease's papers, the tenant's insurance, a contractor's quote, invoice or photo.
2 methods · 9 cases
GuaranteeenumWho stands surety for an applicant: Action Logement's free Visale, a person, a company or bank, or nobody.
4 cases
InvitationKindenumWhat accepting an invitation opens: the target it was made for gets the new account.
4 cases
LeaseStatusenum3 cases
OccupationenumAn applicant's work situation, as a landlord weighs a file.
8 cases
PartyRoleenumWho someone is on a lease.
3 cases
PaymentMethodenum1 method · 5 cases
RentStatusenum1 method · 4 cases
UnitKindenum5 cases
Urgencyenum3 cases
WorkOrderStatusenum1 method · 6 cases
ApplicationTypeclassApplying for a free home: who, how many, from when, situation and income, guarantee, the DossierFacile link, a word - and the consent to the file being kept (three months after the decision). `website` is a trap for robots.
3 methods
ContractorUpdateTypeclassWhat a contractor says of a job: when they come, their quote, what they did, their invoice.
2 methods
InsuranceTypeclassA tenant sends this year's certificate of home insurance: the file, and until when it covers them.
2 methods
InvitationAcceptTypeclassThe account an invitation creates: a username, a password typed twice.
2 methods
MessageTypeclassA message in a lease's thread, from a tenant or from the management.
2 methods
ReportTypeclassA tenant reports a problem: what, where, how urgent.
2 methods · 1 constant
VisitRequestTypeclass"Demander une visite", on a unit's page. The last field is a trap for robots.
3 methods
WorkFileTypeclassA contractor adds a quote, an invoice or a photo to a work order.
2 methods
AssociateBookAccessclassAn associate reads their company's books (omnibase/ledger); its management keeps them. Only loaded with omnibase/ledger.
3 methods
BankSettlementclassA tenant's transfer, seen at the bank and reconciled with their rent call (omnibase/ledger): the rent call is paid - its receipt numbered and sent - without posting it a second time. The open items it cleared say which call: their entries' source ("estate:rent:<reference>").
2 methods
CompanyAccountsclassThe company's accounts as its associates read them (omnibase/ledger, through the organisation's book): the year's income statement so far and the year before, each associate's share of the result - an SCI is transparent: each declares their share (2072, then their own return) -, the bank accounts' balances and their latest movements. Only loaded with omnibase/ledger.
2 methods
ApplicationRequestclassWhat the application form asks (ApplicationType), before it becomes an Application.
1 method · 11 properties
ActivityRepositoryclass2 methods
ApplicationRepositoryclass4 methods
DocumentRepositoryclass3 methods
LeaseRepositoryclass3 methods
MessageRepositoryclass4 methods
OrganisationRepositoryclass1 method
RentCallRepositoryclass4 methods
UnitRepositoryclass3 methods
WorkOrderRepositoryclass4 methods
EstateVoterclassWhat each person may open, from what they are to the organisation (Spaces): its management everything of it; an associate its figures and feed; a tenant their lease, its rents and the problems they reported; a contractor the work orders given to them - nothing else.
1 method · 8 constants
ActivitiesclassWrites the associates' feed: one line per thing that happened. Persisted, not flushed.
2 methods
ApplicationsclassApplications to rent a free home, from received to let: the applicant is told at every step by e-mail (received, invited to visit, declined); the management is told of each new one. Accepting one makes the lease - the applicant its tenant, the home's rent, charges and deposit, starting on the date they asked - takes the home off the market and, when asked, declines the others. Decided applications are deleted three months on (purge).
7 methods
BooksclassThe organisation's books (omnibase/ledger), when it keeps them here: a rent call is a receivable (411 / 706 rent, 708 charges), a payment settles it (512 for a transfer, 5112 for a card or SEPA payment until the provider's payout), a work invoice is a supplier debt (615 / 401). Each posting carries its source, so nothing is posted twice.
5 methods
CompanyRecordsclassA company's identity as the State's registers hold it, read from its SIREN through glitchr/omnistate: its legal name and form, its head office and its creation date from Sirene / RNE (omnistate/annuaire-entreprises), its VAT number from VIES (omnistate/vies) - none when VIES does not know it, as for an SCI letting homes, which is not liable. Loaded only with glitchr/omnistate.
2 methods
DocumentsclassThe files people add from their space: a tenant's insurance certificate (the lease's insurance date follows), a contractor's quote, invoice or photos (the work order's amounts follow). Each lands in the activity feed and, when it is not the management's own, in its mailbox.
3 methods
EstateMailerclassThe e-mails to tenants, associates, contractors and the management: @Estate/email/<name>.html.twig.
2 methods
FiguresclassAn organisation in numbers, for its associates and its back office: what is let, what was called and received this year, what is late, the last months side by side, what works cost, how rents are paid.
2 methods
InvitationsclassNobody signs up: the management invites. An invitation names what it opens (an associate, a lease's party, a contractor, the management team); its link creates the account - or, for someone who has one, attaches it.
5 methods
MessagesclassThe thread between a lease's tenants and the management: a message is kept, then e-mailed to the other side - the management's address, or every tenant of the lease. Reading a thread marks the other side's messages read.
3 methods
OnlinePaymentsclassA rent paid online through omnitrade (Stripe Checkout: card or SEPA debit): the tenant goes to the provider's page, comes back, and the payment is recorded once the provider says it is paid. Off when no gateway is configured or omnitrade is not installed.
5 methods
PaymentsclassMoney received for a rent: recorded once per reference, posted to the books, and - the rent paid in full - its receipt numbered and sent.
3 methods
ReceiptsclassReceipts (quittances): numbered per year in the order rents are paid ("Q-2026-0007"), drawn from @Estate/pdf/receipt.html.twig, as a PDF when dompdf is installed.
6 methods
RentCallsclassThe monthly rent: a call per running lease (once per month, whatever runs it twice), posted to the books, sent to the tenants; then, past its due date, marked late and reminded.
5 methods
RentRevisionsclassThe yearly rent revision of a French residential lease (loi du 6 juillet 1989, art. 17-1): on the lease's anniversary, the rent (charges aside) follows the IRL - the new rent is the rent times the new quarter's index over the lease's reference index, never more. The reference then becomes the new quarter; the tenants get the letter; the next rent calls carry the new rent.
5 methods
SpacesclassWho someone is to the organisations: their management (a Member, or any ROLE_ADMIN), an associate, a tenant (a party of a lease), a contractor.
10 methods
WorkOrdersclassA problem from its report to its invoice: reported (by the tenant or the management), given to a contractor, visited, done, closed. Every step is a line of its timeline, a line of the associates' feed, and an e-mail to whoever it concerns.
6 methods
EstateExtensionclassThe spaces the header offers, and money in euros as the pages write it.
4 methods
Base\Estate
EstateBundle class
class EstateBundle extends AbstractBaseBundle EstateBundle.php:15
Property management on top of omnibase: the organisations that own or manage homes (an SCI, an agency), their buildings and units, their associates, leases and tenants, rent calls and receipts, contractors and work orders - and a private space for each of those people.
EstateBundle::__construct()
public function __construct()EstateBundle::getPath()
public function getPath(): stringThe bundle root is the package root: ./templates is @Estate, ./src/Entity is mapped.
EstateBundle::build()
public function build(ContainerBuilder $container): voidBase\Estate\Admin\Widget
OverviewWidgetType class
final class OverviewWidgetType implements DashboardWidgetTypeInterface OverviewWidgetType.php:23
The company at a glance, first on the dashboard: what is let, the rents of the year called and received, what is late, what the works cost, the last six months side by side - and what waits: rents to collect, work orders to give, applications to look at, rents to revise, tenants' messages to answer, insurance certificates missing or run out.
OverviewWidgetType::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly Figures $figures, readonly RentRevisions $revisions, readonly MessageRepository $messages, readonly ApplicationRepository $applications)OverviewWidgetType::getName()
public static function getName(): stringOverviewWidgetType::getTemplate()
public function getTemplate(): stringOverviewWidgetType::getTemplateVars()
public function getTemplateVars(MenuItem $widget): arrayPaymentsWidgetType class
final class PaymentsWidgetType implements DashboardWidgetTypeInterface PaymentsWidgetType.php:17
Money in: the latest rents received and how - transfer, card or SEPA debit through omnitrade - the month's total per way, and whether online payment is on.
PaymentsWidgetType::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly OnlinePayments $online)PaymentsWidgetType::getName()
public static function getName(): stringPaymentsWidgetType::getTemplate()
public function getTemplate(): stringPaymentsWidgetType::getTemplateVars()
public function getTemplateVars(MenuItem $widget): arrayBase\Estate\Command
ApplicationPurgeCommand class
final class ApplicationPurgeCommand extends Command ApplicationPurgeCommand.php:14
Applications decided (accepted or declined) more than three months ago, deleted - the CNIL's guidance for applicants' files: cron, daily.
ApplicationPurgeCommand::__construct()
public function __construct(readonly Applications $applications)CompanyRefreshCommand class
final class CompanyRefreshCommand extends Command CompanyRefreshCommand.php:16
Every company's identity read again from the registers (Sirene / RNE, VIES), by its SIREN: cron, weekly.
CompanyRefreshCommand::__construct()
public function __construct(readonly CompanyRecords $records, readonly EntityManagerInterface $entityManager)RentCallCommand class
final class RentCallCommand extends Command RentCallCommand.php:14
The month's rents called (and their notices sent): cron, on the 25th for the next month. Run twice, it calls nothing twice.
RentCallCommand::__construct()
public function __construct(readonly RentCalls $rents)RentLateCommand class
final class RentLateCommand extends Command RentLateCommand.php:14
Rents past due marked late, and their tenants reminded once (estate.reminder_days after the due date): cron, daily.
RentLateCommand::__construct()
public function __construct(readonly RentCalls $rents)Base\Estate\Controller\Admin
ActionController class
class ActionController extends AbstractController ActionController.php:42
The back office's buttons that are not a plain form: invite someone to their space, call the month's rents, record a payment, give a work order to a contractor, close it, send a notice to the tenants, read a company from the registers.
ActionController::__construct()
public function __construct(readonly EntityManagerInterface $entityManager)ActionController::invite()
public function invite(Request $request, string $kind, int $id, Invitations $invitations): RedirectResponseActionController::call()
public function call(Request $request, RentCalls $rents): RedirectResponseActionController::payment()
public function payment(Request $request, RentCall $call, Payments $payments): ResponseActionController::assign()
public function assign(Request $request, WorkOrder $order, WorkOrders $orders): ResponseActionController::close()
public function close(Request $request, WorkOrder $order, WorkOrders $orders): RedirectResponseActionController::send()
public function send(Request $request, Notice $notice, EstateMailer $mailer, Activities $activities): RedirectResponseActionController::application()
public function application(Request $request, Application $application, string $do, Applications $applications): ResponseAn application's next step: shortlisted (a click), invited to visit (a date and a word), declined (a word, optional) or accepted (the lease's start; the other applicants declined, if asked) - the applicant told by e-mail but when shortlisted.
ActionController::revise()
public function revise(Request $request, Lease $lease, RentRevisions $revisions): ResponseThe yearly IRL revision of a lease's rent: the new quarter and its index, the date it applies from (the anniversary); "Calculer" shows the new rent, "Appliquer" saves it and sends the tenants the letter.
ActionController::refresh()
public function refresh(Request $request, Organisation $organisation, ?CompanyRecords $records = null): RedirectResponseThe company's identity read again from the registers (Sirene / RNE, VIES), by its SIREN - with glitchr/omnistate.
MessageController class
class MessageController extends AbstractController MessageController.php:23
The management's side of the tenants' messages: every lease's thread, the latest first with its unread count, and a thread to read and answer - the answer is e-mailed to the lease's tenants and shown in their space.
MessageController::__construct()
public function __construct(readonly EntityManagerInterface $entityManager)MessageController::index()
public function index(MessageRepository $messages): ResponseMessageController::thread()
public function thread(Request $request, Lease $lease, Messages $messages): ResponseBase\Estate\Controller\Admin\Crud
AbstractEstateCrudController class
abstract class AbstractEstateCrudController extends AbstractCrudController AbstractEstateCrudController.php:16
The estate screens' shared pieces: an enum as a select, euros stored as cents, the actions' tokens.
AbstractEstateCrudController::setEstateEntityManager()
public function setEstateEntityManager(EntityManagerInterface $entityManager): voidAbstractEstateCrudController::configureCrud()
public function configureCrud(Crud $crud): CrudAbstractEstateCrudController::configureActions()
public function configureActions(Actions $actions): ActionsThe management (ROLE_ADMIN) runs these screens - not only the super-admin, the admin's default.
AbstractEstateCrudController::createEntity()
public function createEntity(string $entityFqcn): objectA new record of a screen: its required company, unit or lease pre-filled with the first there is (most install one company), so the form opens; it stays an ordinary field to change.
ActivityCrudController class
class ActivityCrudController extends AbstractEstateCrudController ActivityCrudController.php:12
ActivityCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringActivityCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringActivityCrudController::configureActions()
public function configureActions(Actions $actions): ActionsActivityCrudController::configureFields()
public function configureFields(string $pageName): iterableApplicationCrudController class
class ApplicationCrudController extends AbstractEstateCrudController ApplicationCrudController.php:26
The applications to rent the free homes, the newest first: who, their income against the rent, their guarantee, their DossierFacile file - and the steps: shortlist, invite to visit, decline, accept (the lease follows).
const STATUSES = ['new' => 'Nouvelle', 'shortlisted' => 'Retenue', 'visit' => 'Visite proposée', 'accepted' => 'Acceptée', 'declined' => 'Refusée']const OCCUPATIONS = ['permanent' => 'CDI', 'fixed_term' => 'CDD / intérim', 'civil_servant' => 'Fonctionnaire', 'self_employed' => 'Indépendant', 'student' => 'Étudiant', 'retir…const GUARANTEES = ['visale' => 'Visale', 'person' => 'Garant personne', 'company' => 'Organisme / banque', 'none' => 'Aucune']
ApplicationCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringApplicationCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringApplicationCrudController::configureCrud()
public function configureCrud(Crud $crud): CrudApplicationCrudController::configureActions()
public function configureActions(Actions $actions): ActionsApplicationCrudController::configureFields()
public function configureFields(string $pageName): iterableAssociateCrudController class
class AssociateCrudController extends AbstractEstateCrudController AssociateCrudController.php:19
The associates: their shares, and the access to their space, by invitation.
AssociateCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringAssociateCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringAssociateCrudController::configureActions()
public function configureActions(Actions $actions): ActionsAssociateCrudController::configureFields()
public function configureFields(string $pageName): iterableBuildingCrudController class
class BuildingCrudController extends AbstractEstateCrudController BuildingCrudController.php:11
BuildingCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringBuildingCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringBuildingCrudController::configureFields()
public function configureFields(string $pageName): iterableContractorCrudController class
class ContractorCrudController extends AbstractEstateCrudController ContractorCrudController.php:12
ContractorCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringContractorCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringContractorCrudController::configureActions()
public function configureActions(Actions $actions): ActionsContractorCrudController::configureFields()
public function configureFields(string $pageName): iterableDeadlineCrudController class
class DeadlineCrudController extends AbstractEstateCrudController DeadlineCrudController.php:12
DeadlineCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringDeadlineCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringDeadlineCrudController::configureFields()
public function configureFields(string $pageName): iterableDocumentCrudController class
class DocumentCrudController extends AbstractEstateCrudController DocumentCrudController.php:25
The homes' and leases' documents: the signed lease, the inventory of fixtures, the diagnostics, the building's rules - shared with the tenants or kept for the management - and what tenants and contractors send (insurance certificates, quotes, invoices, photos).
DocumentCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringDocumentCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringDocumentCrudController::configureCrud()
public function configureCrud(Crud $crud): CrudDocumentCrudController::configureFields()
public function configureFields(string $pageName): iterableDocumentCrudController::createEntity()
public function createEntity(string $entityFqcn): DocumentInvitationCrudController class
class InvitationCrudController extends AbstractEstateCrudController InvitationCrudController.php:11
InvitationCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringInvitationCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringInvitationCrudController::configureActions()
public function configureActions(Actions $actions): ActionsInvitationCrudController::configureFields()
public function configureFields(string $pageName): iterableLeaseCrudController class
class LeaseCrudController extends AbstractEstateCrudController LeaseCrudController.php:17
The leases: who, which home, the rent and its index, the insurance - and the yearly rent revision.
const STATUSES = ['active' => 'En cours', 'notice' => 'Congé donné', 'ended' => 'Terminé']const METHODS = ['transfer' => 'Virement', 'card' => 'Carte', 'sepa_debit' => 'Prélèvement SEPA', 'cheque' => 'Chèque', 'cash' => 'Espèces']
LeaseCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringLeaseCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringLeaseCrudController::configureActions()
public function configureActions(Actions $actions): ActionsLeaseCrudController::configureFields()
public function configureFields(string $pageName): iterableLeasePartyCrudController class
class LeasePartyCrudController extends AbstractEstateCrudController LeasePartyCrudController.php:14
The people on the leases; a tenant gets their space by invitation.
LeasePartyCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringLeasePartyCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringLeasePartyCrudController::configureActions()
public function configureActions(Actions $actions): ActionsLeasePartyCrudController::configureFields()
public function configureFields(string $pageName): iterableMemberCrudController class
class MemberCrudController extends AbstractEstateCrudController MemberCrudController.php:13
The management team: who runs the back office. Invited by e-mail.
MemberCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringMemberCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringMemberCrudController::configureActions()
public function configureActions(Actions $actions): ActionsMemberCrudController::configureFields()
public function configureFields(string $pageName): iterableNoticeCrudController class
class NoticeCrudController extends AbstractEstateCrudController NoticeCrudController.php:13
NoticeCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringNoticeCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringNoticeCrudController::configureActions()
public function configureActions(Actions $actions): ActionsNoticeCrudController::configureFields()
public function configureFields(string $pageName): iterableOrganisationCrudController class
class OrganisationCrudController extends AbstractEstateCrudController OrganisationCrudController.php:19
The companies: their identity, their address, the IBAN rents are paid to, their books.
With glitchr/omnistate, the identity is read from the registers by the SIREN.
OrganisationCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringOrganisationCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringOrganisationCrudController::configureActions()
public function configureActions(Actions $actions): ActionsOrganisationCrudController::configureFields()
public function configureFields(string $pageName): iterablePaymentCrudController class
class PaymentCrudController extends AbstractEstateCrudController PaymentCrudController.php:13
PaymentCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringPaymentCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringPaymentCrudController::configureActions()
public function configureActions(Actions $actions): ActionsPaymentCrudController::configureFields()
public function configureFields(string $pageName): iterableRentCallCrudController class
class RentCallCrudController extends AbstractEstateCrudController RentCallCrudController.php:14
The rents called: read-only, settled by "Encaisser" (a payment) or by the bank reconciliation.
const STATUSES = ['called' => 'Appelé', 'partial' => 'Partiel', 'paid' => 'Payé', 'late' => 'En retard']
RentCallCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringRentCallCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringRentCallCrudController::configureActions()
public function configureActions(Actions $actions): ActionsRentCallCrudController::configureFields()
public function configureFields(string $pageName): iterableUnitCrudController class
class UnitCrudController extends AbstractEstateCrudController UnitCrudController.php:18
The homes: what they are, what they cost, whether they are on the public site and when they are free.
const KINDS = ['house' => 'Maison', 'apartment' => 'Appartement', 'studio' => 'Studio', 'parking' => 'Parking', 'commercial' => 'Local commercial']
UnitCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringUnitCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringUnitCrudController::configureFields()
public function configureFields(string $pageName): iterableUnitPhotoCrudController class
class UnitPhotoCrudController extends AbstractEstateCrudController UnitPhotoCrudController.php:11
UnitPhotoCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringUnitPhotoCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringUnitPhotoCrudController::configureFields()
public function configureFields(string $pageName): iterableWorkOrderCrudController class
class WorkOrderCrudController extends AbstractEstateCrudController WorkOrderCrudController.php:16
The work orders: "Confier" gives one to a contractor (and tells them), "Clôturer" sends its invoice to the books.
const STATUSES = ['reported' => 'Signalé', 'assigned' => 'Confié', 'scheduled' => 'Planifié', 'done' => 'Terminé', 'closed' => 'Clôturé', 'cancelled' => 'Annulé']const URGENCIES = ['low' => 'Peut attendre', 'normal' => 'Normal', 'urgent' => 'Urgent']
WorkOrderCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringWorkOrderCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringWorkOrderCrudController::configureActions()
public function configureActions(Actions $actions): ActionsWorkOrderCrudController::configureFields()
public function configureFields(string $pageName): iterableBase\Estate\Controller\Client
AssociateController class
class AssociateController extends AbstractController AssociateController.php:28
The associates' space: the company's activity as it happens - what is let and what is free, rents called and received, what is late, works and their cost, the next deadlines, the day-to-day, the documents - and, with omnibase/ledger, its accounts: the year's result and each one's share, the bank. Read-only.
AssociateController::__construct()
public function __construct(readonly Spaces $spaces, readonly ?string $documentsRoute = null)AssociateController::index()
public function index(Request $request, Figures $figures, ActivityRepository $activities, UnitRepository $units, EntityManagerInterface $entityManager, ?CompanyAccounts $accounts = null): ResponseContractorController class
class ContractorController extends AbstractController ContractorController.php:26
The contractor's space: the jobs given to them, and for each the address, how to get in, who lives there, the timeline - and a form to say when they come, what it costs, what they did.
ContractorController::__construct()
public function __construct(readonly Spaces $spaces)ContractorController::index()
public function index(WorkOrderRepository $orders): ResponseContractorController::show()
public function show(Request $request, WorkOrder $order, WorkOrders $orders, Documents $documents, DocumentRepository $documentRepository): ResponseDocumentController class
class DocumentController extends AbstractController DocumentController.php:16
A document's file, streamed to whoever may open it (EstateVoter::DOCUMENT_VIEW): the uploads stay out of public/.
DocumentController::show()
public function show(Document $document): BinaryFileResponseInvitationController class
class InvitationController extends AbstractController InvitationController.php:22
An invitation's link: a new account (a username, a password), or - signed in already, or with an account for that address - the account attached.
Then the space it opens.
InvitationController::accept()
public function accept(Request $request, string $token, Invitations $invitations, Security $security, EntityManagerInterface $entityManager, TranslatorInterface $translator): ResponseTenantController class
class TenantController extends AbstractController TenantController.php:35
The tenant's space: their lease, its rents (to pay online, their notices and receipts to download, a certificate of rent up to date), the lease's documents and their insurance certificate, their messages with the management, the problems they reported and a form to report one, the notices of their building.
TenantController::__construct()
public function __construct(readonly Spaces $spaces, readonly EntityManagerInterface $entityManager)TenantController::index()
public function index(Request $request, WorkOrderRepository $workOrders, RentCallRepository $calls, WorkOrders $orders, OnlinePayments $online, DocumentRepository $documentRepository, Documents $documents, Messages $messages): ResponseTenantController::pay()
public function pay(Request $request, RentCall $call, OnlinePayments $online): ResponseTenantController::paid()
public function paid(Request $request, RentCall $call, OnlinePayments $online): ResponseTenantController::document()
public function document(RentCall $call, string $kind, Receipts $receipts): ResponseThe notice (avis d'échéance) or, paid, the receipt (quittance): a PDF, or the printable page without dompdf.
TenantController::attestation()
public function attestation(Lease $lease, Receipts $receipts, RentCallRepository $calls): ResponseThe certificate of rent up to date: only when nothing is owed today.
UnitController class
class UnitController extends AbstractController UnitController.php:19
The public site's homes: the published units, each one's page with a visit request and, free, its application form.
UnitController::index()
public function index(Request $request, UnitRepository $units): ResponseUnitController::show()
public function show(Request $request, string $slug, UnitRepository $units, EstateMailer $mailer): ResponseUnitController::apply()
public function apply(Request $request, string $slug, UnitRepository $units, Applications $applications): ResponseApplying for a free home: the form, then the applicant and the management told.
Base\Estate\DependencyInjection
EstateConfiguration class
class EstateConfiguration implements ConfigurationInterface EstateConfiguration.php:8
EstateConfiguration::getConfigTreeBuilder()
public function getConfigTreeBuilder(): TreeBuilderEstateExtension class
class EstateExtension extends AbstractBaseExtension EstateExtension.php:11
EstateExtension::getConfiguration()
public function getConfiguration(array $config, ContainerBuilder $container): EstateConfigurationEstateExtension::load()
public function load(array $configs, ContainerBuilder $container): voidBase\Estate\Entity
Activity class
class Activity Activity.php:10
A line of the company's day-to-day, as its associates read it: a rent paid, a boiler replaced.
Activity::__construct()
public function __construct(Organisation $organisation, ActivityKind $kind, string $message, ?Unit $unit = null, ?int $amount = null, ?\DateTimeImmutable $happenedAt = null)Activity::__toString()
public function __toString(): stringActivity::getId()
public function getId(): ?intActivity::getOrganisation()
public function getOrganisation(): OrganisationActivity::getUnit()
public function getUnit(): ?UnitActivity::getKind()
public function getKind(): ActivityKindActivity::getMessage()
public function getMessage(): stringActivity::getAmount()
public function getAmount(): ?intActivity::getHappenedAt()
public function getHappenedAt(): \DateTimeImmutableApplication class
class Application Application.php:19
Someone applying to rent a free home, from its page: who they are, how many they would be, when they would move in, their situation and income, their guarantee, and the link to their file on DossierFacile (the State's service: identity papers, payslips and tax notice verified there, never sent to the site). Kept three months after the home is let or the application declined (Applications::purge, as the CNIL recommends), then deleted.
Application::__construct()
public function __construct(?Unit $unit = null)Application::__toString()
public function __toString(): stringApplication::getId()
public function getId(): ?intApplication::getUnit()
public function getUnit(): UnitApplication::setUnit()
public function setUnit(Unit $unit): selfApplication::getOrganisation()
public function getOrganisation(): OrganisationApplication::getFirstName()
public function getFirstName(): stringApplication::setFirstName()
public function setFirstName(?string $firstName): selfApplication::getLastName()
public function getLastName(): stringApplication::setLastName()
public function setLastName(?string $lastName): selfApplication::getName()
public function getName(): stringApplication::getEmail()
public function getEmail(): stringApplication::setEmail()
public function setEmail(?string $email): selfApplication::getPhone()
public function getPhone(): ?stringApplication::setPhone()
public function setPhone(?string $phone): selfApplication::getOccupants()
public function getOccupants(): intApplication::setOccupants()
public function setOccupants(?int $occupants): selfApplication::getMoveInOn()
public function getMoveInOn(): ?\DateTimeImmutableApplication::setMoveInOn()
public function setMoveInOn(?\DateTimeImmutable $moveInOn): selfApplication::getOccupation()
public function getOccupation(): OccupationApplication::setOccupation()
public function setOccupation(Occupation $occupation): selfApplication::getIncome()
public function getIncome(): intApplication::setIncome()
public function setIncome(?int $income): selfApplication::getGuarantee()
public function getGuarantee(): GuaranteeApplication::setGuarantee()
public function setGuarantee(Guarantee $guarantee): selfApplication::getDossierUrl()
public function getDossierUrl(): ?stringApplication::setDossierUrl()
public function setDossierUrl(?string $dossierUrl): selfApplication::getMessage()
public function getMessage(): ?stringApplication::setMessage()
public function setMessage(?string $message): selfApplication::getStatus()
public function getStatus(): ApplicationStatusApplication::setStatus()
public function setStatus(ApplicationStatus $status): selfApplication::getNotes()
public function getNotes(): ?stringApplication::setNotes()
public function setNotes(?string $notes): selfApplication::getVisitAt()
public function getVisitAt(): ?\DateTimeImmutableApplication::setVisitAt()
public function setVisitAt(?\DateTimeImmutable $visitAt): selfApplication::getLease()
public function getLease(): ?LeaseApplication::setLease()
public function setLease(?Lease $lease): selfApplication::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableApplication::getDecidedAt()
public function getDecidedAt(): ?\DateTimeImmutableApplication::getAsked()
public function getAsked(): intThe monthly rent the home asks, charges included, in cents.
Application::getIncomeRatio()
public function getIncomeRatio(): ?floatIncome over rent, charges included: landlords look for about 3.
Associate class
class Associate Associate.php:15
A partner of the company: their shares, their quality, and - once they accepted their invitation - the account that opens the associates' space.
Shown on the public site only when they agreed to.
Associate::__construct()
public function __construct(Organisation $organisation, string $firstName = '', string $lastName = '', string $email = '')Associate::__toString()
public function __toString(): stringAssociate::getId()
public function getId(): ?intAssociate::getOrganisation()
public function getOrganisation(): OrganisationAssociate::setOrganisation()
public function setOrganisation(Organisation $organisation): selfAssociate::getUser()
public function getUser(): ?UserAssociate::setUser()
public function setUser(?User $user): selfAssociate::getFirstName()
public function getFirstName(): stringAssociate::setFirstName()
public function setFirstName(string $firstName): selfAssociate::getLastName()
public function getLastName(): stringAssociate::setLastName()
public function setLastName(string $lastName): selfAssociate::getName()
public function getName(): stringAssociate::getEmail()
public function getEmail(): stringAssociate::setEmail()
public function setEmail(string $email): selfAssociate::getPhone()
public function getPhone(): ?stringAssociate::setPhone()
public function setPhone(?string $phone): selfAssociate::getShares()
public function getShares(): intAssociate::setShares()
public function setShares(?int $shares): selfAssociate::getQuality()
public function getQuality(): AssociateQualityAssociate::setQuality()
public function setQuality(AssociateQuality $quality): selfAssociate::getSince()
public function getSince(): ?\DateTimeImmutableAssociate::setSince()
public function setSince(?\DateTimeImmutable $since): selfAssociate::isPublic()
public function isPublic(): boolAssociate::setPublic()
public function setPublic(bool $public): selfAssociate::getBio()
public function getBio(): ?stringAssociate::setBio()
public function setBio(?string $bio): selfAssociate::getPortrait()
public function getPortrait(): ?stringAssociate::getPortraitFile()
public function getPortraitFile()Associate::setPortrait()
public function setPortrait($portrait): selfBuilding class
class Building Building.php:8
A building some units are in: its address, its year, its common parts.
Building::__construct()
public function __construct(Organisation $organisation, string $name = '')Building::__toString()
public function __toString(): stringBuilding::getId()
public function getId(): ?intBuilding::getOrganisation()
public function getOrganisation(): OrganisationBuilding::setOrganisation()
public function setOrganisation(Organisation $organisation): selfBuilding::getName()
public function getName(): stringBuilding::setName()
public function setName(string $name): selfBuilding::getAddress()
public function getAddress(): stringBuilding::setAddress()
public function setAddress(string $address): selfBuilding::getPostcode()
public function getPostcode(): stringBuilding::setPostcode()
public function setPostcode(string $postcode): selfBuilding::getCity()
public function getCity(): stringBuilding::setCity()
public function setCity(string $city): selfBuilding::getBuiltIn()
public function getBuiltIn(): ?intBuilding::setBuiltIn()
public function setBuiltIn(?int $builtIn): selfBuilding::getAccess()
public function getAccess(): ?stringBuilding::setAccess()
public function setAccess(?string $access): selfContractor class
class Contractor Contractor.php:9
A tradesperson the organisation calls on: their company, their trade, and their account once invited.
Contractor::__construct()
public function __construct(Organisation $organisation, string $company = '', string $trade = '', string $email = '')Contractor::__toString()
public function __toString(): stringContractor::getId()
public function getId(): ?intContractor::getOrganisation()
public function getOrganisation(): OrganisationContractor::setOrganisation()
public function setOrganisation(Organisation $organisation): selfContractor::getUser()
public function getUser(): ?UserContractor::setUser()
public function setUser(?User $user): selfContractor::getCompany()
public function getCompany(): stringContractor::setCompany()
public function setCompany(string $company): selfContractor::getContactName()
public function getContactName(): ?stringContractor::setContactName()
public function setContactName(?string $contactName): selfContractor::getTrade()
public function getTrade(): stringContractor::setTrade()
public function setTrade(string $trade): selfContractor::getSiret()
public function getSiret(): ?stringContractor::setSiret()
public function setSiret(?string $siret): selfContractor::getEmail()
public function getEmail(): stringContractor::setEmail()
public function setEmail(string $email): selfContractor::getPhone()
public function getPhone(): ?stringContractor::setPhone()
public function setPhone(?string $phone): selfContractor::getIban()
public function getIban(): ?stringContractor::setIban()
public function setIban(?string $iban): selfDeadline class
class Deadline Deadline.php:8
A date the company must not miss: the property tax, the general meeting, an insurance renewal.
Deadline::__construct()
public function __construct(Organisation $organisation, string $title = '', ?\DateTimeImmutable $dueOn = null)Deadline::__toString()
public function __toString(): stringDeadline::getId()
public function getId(): ?intDeadline::getOrganisation()
public function getOrganisation(): OrganisationDeadline::setOrganisation()
public function setOrganisation(Organisation $organisation): selfDeadline::getTitle()
public function getTitle(): stringDeadline::setTitle()
public function setTitle(string $title): selfDeadline::getDueOn()
public function getDueOn(): \DateTimeImmutableDeadline::setDueOn()
public function setDueOn(\DateTimeImmutable $dueOn): selfDeadline::isYearly()
public function isYearly(): boolDeadline::setYearly()
public function setYearly(bool $yearly): selfDeadline::getNotes()
public function getNotes(): ?stringDeadline::setNotes()
public function setNotes(?string $notes): selfDeadline::next()
public function next(?\DateTimeImmutable $today = null): \DateTimeImmutableIts next date from today: itself, or - yearly and past - the same day of a later year.
Document class
class Document Document.php:20
A file of the company's records, attached to what it is about: a home (its diagnostics, the building's rules), a lease (the signed lease, the inventory of fixtures, the tenant's insurance certificate) or a work order (the contractor's quote, invoice and photos). Who may open it follows from that (EstateVoter::DOCUMENT_VIEW): the management and the associates always, the tenants of the lease or of the home when it is shared with them, the contractor of the work order.
Document::__construct()
public function __construct(?Organisation $organisation = null, DocumentKind $kind = DocumentKind::OTHER, string $title = '')Document::__toString()
public function __toString(): stringDocument::getId()
public function getId(): ?intDocument::getOrganisation()
public function getOrganisation(): OrganisationDocument::setOrganisation()
public function setOrganisation(Organisation $organisation): selfDocument::getUnit()
public function getUnit(): ?UnitDocument::setUnit()
public function setUnit(?Unit $unit): selfDocument::getLease()
public function getLease(): ?LeaseDocument::setLease()
public function setLease(?Lease $lease): selfDocument::getWorkOrder()
public function getWorkOrder(): ?WorkOrderDocument::setWorkOrder()
public function setWorkOrder(?WorkOrder $workOrder): selfDocument::getKind()
public function getKind(): DocumentKindDocument::setKind()
public function setKind(DocumentKind $kind): selfDocument::getTitle()
public function getTitle(): stringDocument::setTitle()
public function setTitle(?string $title): selfDocument::getFile()
public function getFile(): ?stringDocument::setFile()
public function setFile($file): selfDocument::isTenantVisible()
public function isTenantVisible(): boolDocument::setTenantVisible()
public function setTenantVisible(bool $tenantVisible): selfDocument::getValidUntil()
public function getValidUntil(): ?\DateTimeImmutableDocument::setValidUntil()
public function setValidUntil(?\DateTimeImmutable $validUntil): selfDocument::getUploadedBy()
public function getUploadedBy(): ?UserDocument::getUploadedByName()
public function getUploadedByName(): ?stringDocument::setUploadedBy()
public function setUploadedBy(?User $user, ?string $name = null): selfDocument::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableDocument::isImage()
public function isImage(): boolInvitation class
class Invitation extends BaseInvitation Invitation.php:17
An e-mail that opens a space: whoever follows its link before it runs out gets an account (or signs in with theirs), attached to what it was made for - an associate, a lease's party, a contractor, the management team.
Only the token's hash is kept. The e-mail, the token, the expiry and the acceptance are glitchr/omnibase's (Base\Entity\User\Invitation, a mapped superclass): same columns, same table as before.
Invitation::__construct()
public function __construct(Organisation $organisation, InvitationKind $kind, int $targetId, string $email, string $name, string $tokenHash, \DateTimeImmutable $expiresAt)Invitation::__toString()
public function __toString(): stringInvitation::getId()
public function getId(): ?intInvitation::getOrganisation()
public function getOrganisation(): OrganisationInvitation::getKind()
public function getKind(): InvitationKindInvitation::getTargetId()
public function getTargetId(): intLease class
class Lease Lease.php:17
A lease of a unit: who lives there (LeaseParty), from when, for how much, on which day the rent is due. Its rent calls are made each month from it.
Lease::__construct()
public function __construct(Unit $unit, string $reference = '', ?\DateTimeImmutable $startOn = null)Lease::__toString()
public function __toString(): stringLease::getId()
public function getId(): ?intLease::getUnit()
public function getUnit(): UnitLease::setUnit()
public function setUnit(Unit $unit): selfLease::getOrganisation()
public function getOrganisation(): OrganisationLease::getReference()
public function getReference(): stringLease::setReference()
public function setReference(string $reference): selfLease::getStartOn()
public function getStartOn(): \DateTimeImmutableLease::setStartOn()
public function setStartOn(\DateTimeImmutable $startOn): selfLease::getEndOn()
public function getEndOn(): ?\DateTimeImmutableLease::setEndOn()
public function setEndOn(?\DateTimeImmutable $endOn): selfLease::getRent()
public function getRent(): intLease::setRent()
public function setRent(?int $rent): selfLease::getCharges()
public function getCharges(): intLease::setCharges()
public function setCharges(?int $charges): selfLease::getMonthly()
public function getMonthly(): intLease::getDeposit()
public function getDeposit(): intLease::setDeposit()
public function setDeposit(?int $deposit): selfLease::getDueDay()
public function getDueDay(): intLease::setDueDay()
public function setDueDay(?int $dueDay): selfLease::getPaymentMethod()
public function getPaymentMethod(): PaymentMethodLease::setPaymentMethod()
public function setPaymentMethod(PaymentMethod $paymentMethod): selfLease::getStatus()
public function getStatus(): LeaseStatusLease::setStatus()
public function setStatus(LeaseStatus $status): selfLease::getNoticeOn()
public function getNoticeOn(): ?\DateTimeImmutableLease::setNoticeOn()
public function setNoticeOn(?\DateTimeImmutable $noticeOn): selfLease::getIndexQuarter()
public function getIndexQuarter(): ?stringLease::setIndexQuarter()
public function setIndexQuarter(?string $indexQuarter): selfLease::getIndexValue()
public function getIndexValue(): ?stringLease::setIndexValue()
public function setIndexValue(string|float|null $indexValue): selfLease::getRevisedOn()
public function getRevisedOn(): ?\DateTimeImmutableLease::setRevisedOn()
public function setRevisedOn(?\DateTimeImmutable $revisedOn): selfLease::getInsuranceUntil()
public function getInsuranceUntil(): ?\DateTimeImmutableLease::setInsuranceUntil()
public function setInsuranceUntil(?\DateTimeImmutable $insuranceUntil): selfLease::getNotes()
public function getNotes(): ?stringLease::setNotes()
public function setNotes(?string $notes): selfLease::getParties()
public function getParties(): CollectionLease::addParty()
public function addParty(LeaseParty $party): selfLease::removeParty()
public function removeParty(LeaseParty $party): selfLease::getTenants()
public function getTenants(): array- Returns
the tenants and co-tenants, not the guarantors
Lease::getTenantNames()
public function getTenantNames(): stringLease::getRentCalls()
public function getRentCalls(): CollectionLease::isRunningOn()
public function isRunningOn(\DateTimeImmutable $on): boolLeaseParty class
class LeaseParty LeaseParty.php:10
Someone on a lease: a tenant, a co-tenant, a guarantor - and, once invited, their account.
LeaseParty::__construct()
public function __construct(string $firstName = '', string $lastName = '', string $email = '', PartyRole $role = PartyRole::TENANT)LeaseParty::__toString()
public function __toString(): stringLeaseParty::getId()
public function getId(): ?intLeaseParty::getLease()
public function getLease(): ?LeaseLeaseParty::setLease()
public function setLease(?Lease $lease): selfLeaseParty::getUser()
public function getUser(): ?UserLeaseParty::setUser()
public function setUser(?User $user): selfLeaseParty::getRole()
public function getRole(): PartyRoleLeaseParty::setRole()
public function setRole(PartyRole $role): selfLeaseParty::getFirstName()
public function getFirstName(): stringLeaseParty::setFirstName()
public function setFirstName(string $firstName): selfLeaseParty::getLastName()
public function getLastName(): stringLeaseParty::setLastName()
public function setLastName(string $lastName): selfLeaseParty::getName()
public function getName(): stringLeaseParty::getEmail()
public function getEmail(): stringLeaseParty::setEmail()
public function setEmail(string $email): selfLeaseParty::getPhone()
public function getPhone(): ?stringLeaseParty::setPhone()
public function setPhone(?string $phone): selfLeaseParty::getIban()
public function getIban(): ?stringLeaseParty::setIban()
public function setIban(?string $iban): selfMember class
class Member Member.php:9
Someone of the management team of an organisation: they run its back office.
Member::__construct()
public function __construct(Organisation $organisation, string $name = '', string $email = '')Member::__toString()
public function __toString(): stringMember::getId()
public function getId(): ?intMember::getOrganisation()
public function getOrganisation(): OrganisationMember::setOrganisation()
public function setOrganisation(Organisation $organisation): selfMember::getUser()
public function getUser(): ?UserMember::setUser()
public function setUser(?User $user): selfMember::getName()
public function getName(): stringMember::setName()
public function setName(string $name): selfMember::getEmail()
public function getEmail(): stringMember::setEmail()
public function setEmail(string $email): selfMember::getTitle()
public function getTitle(): ?stringMember::setTitle()
public function setTitle(?string $title): selfMessage class
class Message Message.php:14
A message between a lease's tenants and the management - one thread per lease, in the tenant's space and in the back office (Messages), each new one sent by e-mail to the other side.
Message::__construct()
public function __construct(Lease $lease, string $authorName, string $body, bool $fromManagement, ?User $author = null)Message::getId()
public function getId(): ?intMessage::getLease()
public function getLease(): LeaseMessage::getAuthor()
public function getAuthor(): ?UserMessage::getAuthorName()
public function getAuthorName(): stringMessage::isFromManagement()
public function isFromManagement(): boolMessage::getBody()
public function getBody(): stringMessage::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableMessage::getReadAt()
public function getReadAt(): ?\DateTimeImmutableMessage::markRead()
public function markRead(): selfNotice class
class Notice Notice.php:8
A word to the tenants of a building, or of all the units: a water cut, works on the stairs.
Notice::__construct()
public function __construct(Organisation $organisation, string $title = '', string $body = '')Notice::__toString()
public function __toString(): stringNotice::getId()
public function getId(): ?intNotice::getOrganisation()
public function getOrganisation(): OrganisationNotice::setOrganisation()
public function setOrganisation(Organisation $organisation): selfNotice::getBuilding()
public function getBuilding(): ?BuildingNotice::setBuilding()
public function setBuilding(?Building $building): selfNotice::getTitle()
public function getTitle(): stringNotice::setTitle()
public function setTitle(string $title): selfNotice::getBody()
public function getBody(): stringNotice::setBody()
public function setBody(string $body): selfNotice::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableNotice::getSentAt()
public function getSentAt(): ?\DateTimeImmutableNotice::setSentAt()
public function setSentAt(?\DateTimeImmutable $sentAt): selfOrganisation class
class Organisation Organisation.php:14
Who owns or manages the homes: an SCI, an agency. Everything else belongs to one; its management team (Member), its associates and its books (omnibase/ledger's Book, by id) hang from it.
Organisation::__construct()
public function __construct(string $name = '', string $slug = '')Organisation::__toString()
public function __toString(): stringOrganisation::getId()
public function getId(): ?intOrganisation::getName()
public function getName(): stringOrganisation::setName()
public function setName(string $name): selfOrganisation::getSlug()
public function getSlug(): stringOrganisation::setSlug()
public function setSlug(string $slug): selfOrganisation::getLegalName()
public function getLegalName(): ?stringOrganisation::setLegalName()
public function setLegalName(?string $legalName): selfOrganisation::getVatNumber()
public function getVatNumber(): ?stringOrganisation::setVatNumber()
public function setVatNumber(?string $vatNumber): selfOrganisation::getRegistryCheckedAt()
public function getRegistryCheckedAt(): ?\DateTimeImmutableOrganisation::setRegistryCheckedAt()
public function setRegistryCheckedAt(?\DateTimeImmutable $registryCheckedAt): selfOrganisation::getLegalForm()
public function getLegalForm(): ?stringOrganisation::setLegalForm()
public function setLegalForm(?string $legalForm): selfOrganisation::getSiren()
public function getSiren(): ?stringOrganisation::setSiren()
public function setSiren(?string $siren): selfOrganisation::getAddress()
public function getAddress(): ?stringOrganisation::setAddress()
public function setAddress(?string $address): selfOrganisation::getPostcode()
public function getPostcode(): ?stringOrganisation::setPostcode()
public function setPostcode(?string $postcode): selfOrganisation::getCity()
public function getCity(): ?stringOrganisation::setCity()
public function setCity(?string $city): selfOrganisation::getEmail()
public function getEmail(): ?stringOrganisation::setEmail()
public function setEmail(?string $email): selfOrganisation::getPhone()
public function getPhone(): ?stringOrganisation::setPhone()
public function setPhone(?string $phone): selfOrganisation::getIban()
public function getIban(): ?stringOrganisation::setIban()
public function setIban(?string $iban): selfOrganisation::getBookId()
public function getBookId(): ?intOrganisation::setBookId()
public function setBookId(?int $bookId): selfOrganisation::getFoundedOn()
public function getFoundedOn(): ?\DateTimeImmutableOrganisation::setFoundedOn()
public function setFoundedOn(?\DateTimeImmutable $foundedOn): selfOrganisation::getFullAddress()
public function getFullAddress(): string"12 rue …, 67000 Strasbourg"
Payment class
class Payment Payment.php:9
Money received for a rent call: a transfer seen at the bank, a card or SEPA payment online, a cheque.
Payment::__construct()
public function __construct(RentCall $rentCall, int $amount, PaymentMethod $method, ?\DateTimeImmutable $paidOn = null, ?string $reference = null)Payment::__toString()
public function __toString(): stringPayment::getId()
public function getId(): ?intPayment::getRentCall()
public function getRentCall(): RentCallPayment::getAmount()
public function getAmount(): intPayment::getMethod()
public function getMethod(): PaymentMethodPayment::getPaidOn()
public function getPaidOn(): \DateTimeImmutablePayment::getReference()
public function getReference(): ?stringRentCall class
class RentCall RentCall.php:16
A month's rent asked of a lease (the avis d'échéance): rent and charges, due on the lease's day, settled by payments. Paid in full, its receipt (quittance) is numbered and can be downloaded.
RentCall::__construct()
public function __construct(Lease $lease, \DateTimeImmutable $period)RentCall::__toString()
public function __toString(): stringRentCall::getId()
public function getId(): ?intRentCall::getLease()
public function getLease(): LeaseRentCall::getPeriod()
public function getPeriod(): \DateTimeImmutableRentCall::getDueOn()
public function getDueOn(): \DateTimeImmutableRentCall::setDueOn()
public function setDueOn(\DateTimeImmutable $dueOn): selfRentCall::getReference()
public function getReference(): stringRentCall::getRent()
public function getRent(): intRentCall::setRent()
public function setRent(int $rent): selfRentCall::getCharges()
public function getCharges(): intRentCall::setCharges()
public function setCharges(int $charges): selfRentCall::getTotal()
public function getTotal(): intRentCall::getPaid()
public function getPaid(): intRentCall::getRemaining()
public function getRemaining(): intRentCall::getStatus()
public function getStatus(): RentStatusRentCall::setStatus()
public function setStatus(RentStatus $status): selfRentCall::getCalledAt()
public function getCalledAt(): \DateTimeImmutableRentCall::setCalledAt()
public function setCalledAt(\DateTimeImmutable $calledAt): selfRentCall::getPaidAt()
public function getPaidAt(): ?\DateTimeImmutableRentCall::getRemindedAt()
public function getRemindedAt(): ?\DateTimeImmutableRentCall::setRemindedAt()
public function setRemindedAt(?\DateTimeImmutable $remindedAt): selfRentCall::getReceiptNumber()
public function getReceiptNumber(): ?stringRentCall::setReceiptNumber()
public function setReceiptNumber(?string $receiptNumber): selfRentCall::getPayments()
public function getPayments(): CollectionRentCall::addPayment()
public function addPayment(Payment $payment): selfSettles it by a payment: partial, then paid once the total is reached.
RentCall::isPaid()
public function isPaid(): boolRentCall::isLate()
public function isLate(?\DateTimeImmutable $today = null): boolUnit class
class Unit Unit.php:16
A home the organisation lets: a house, a flat, a studio, a parking space, premises. Published, it is on the public site with its photos, what it costs and when it is free; its façade colour paints it until a photo is in.
Unit::__construct()
public function __construct(Organisation $organisation, string $name = '', string $slug = '')Unit::__toString()
public function __toString(): stringUnit::getId()
public function getId(): ?intUnit::getOrganisation()
public function getOrganisation(): OrganisationUnit::setOrganisation()
public function setOrganisation(Organisation $organisation): selfUnit::getBuilding()
public function getBuilding(): ?BuildingUnit::setBuilding()
public function setBuilding(?Building $building): selfUnit::getKind()
public function getKind(): UnitKindUnit::setKind()
public function setKind(UnitKind $kind): selfUnit::getName()
public function getName(): stringUnit::setName()
public function setName(string $name): selfUnit::getSlug()
public function getSlug(): stringUnit::setSlug()
public function setSlug(string $slug): selfUnit::getAddress()
public function getAddress(): ?stringUnit::setAddress()
public function setAddress(?string $address): selfUnit::getPostcode()
public function getPostcode(): ?stringUnit::setPostcode()
public function setPostcode(?string $postcode): selfUnit::getCity()
public function getCity(): ?stringUnit::setCity()
public function setCity(?string $city): selfUnit::getDistrict()
public function getDistrict(): ?stringUnit::setDistrict()
public function setDistrict(?string $district): selfUnit::getDoor()
public function getDoor(): ?stringUnit::setDoor()
public function setDoor(?string $door): selfUnit::getSurface()
public function getSurface(): ?floatUnit::setSurface()
public function setSurface(float|string|null $surface): selfUnit::getRooms()
public function getRooms(): ?intUnit::setRooms()
public function setRooms(?int $rooms): selfUnit::getBedrooms()
public function getBedrooms(): ?intUnit::setBedrooms()
public function setBedrooms(?int $bedrooms): selfUnit::getFloor()
public function getFloor(): ?intUnit::setFloor()
public function setFloor(?int $floor): selfUnit::getHeating()
public function getHeating(): ?stringUnit::setHeating()
public function setHeating(?string $heating): selfUnit::getEnergyClass()
public function getEnergyClass(): ?stringUnit::setEnergyClass()
public function setEnergyClass(?string $energyClass): selfUnit::getEnergyValue()
public function getEnergyValue(): ?intUnit::setEnergyValue()
public function setEnergyValue(?int $energyValue): selfUnit::getClimateClass()
public function getClimateClass(): ?stringUnit::setClimateClass()
public function setClimateClass(?string $climateClass): selfUnit::getDescription()
public function getDescription(): ?stringUnit::setDescription()
public function setDescription(?string $description): selfUnit::getFeatures()
public function getFeatures(): arrayUnit::setFeatures()
public function setFeatures(array|string|null $features): selfUnit::getRent()
public function getRent(): intUnit::setRent()
public function setRent(?int $rent): selfUnit::getCharges()
public function getCharges(): intUnit::setCharges()
public function setCharges(?int $charges): selfUnit::getDeposit()
public function getDeposit(): intUnit::setDeposit()
public function setDeposit(?int $deposit): selfUnit::isFurnished()
public function isFurnished(): boolUnit::setFurnished()
public function setFurnished(bool $furnished): selfUnit::isPublished()
public function isPublished(): boolUnit::setPublished()
public function setPublished(bool $published): selfUnit::getAvailableFrom()
public function getAvailableFrom(): ?\DateTimeImmutableUnit::setAvailableFrom()
public function setAvailableFrom(?\DateTimeImmutable $availableFrom): selfUnit::getFacade()
public function getFacade(): stringUnit::setFacade()
public function setFacade(?string $facade): selfUnit::getPosition()
public function getPosition(): intUnit::setPosition()
public function setPosition(?int $position): selfUnit::getPhotos()
public function getPhotos(): CollectionUnit::addPhoto()
public function addPhoto(UnitPhoto $photo): selfUnit::removePhoto()
public function removePhoto(UnitPhoto $photo): selfUnit::getCover()
public function getCover(): ?UnitPhotoUnit::getLeases()
public function getLeases(): CollectionUnit::getCurrentLease()
public function getCurrentLease(?\DateTimeImmutable $on = null): ?LeaseThe lease running today, if any.
Unit::isLet()
public function isLet(?\DateTimeImmutable $on = null): boolUnit::isAvailable()
public function isAvailable(): boolFree today, or from a date: what the public site says.
UnitPhoto class
class UnitPhoto UnitPhoto.php:9
A photograph of a unit, in its gallery's order.
UnitPhoto::__toString()
public function __toString(): stringUnitPhoto::getId()
public function getId(): ?intUnitPhoto::getUnit()
public function getUnit(): ?UnitUnitPhoto::setUnit()
public function setUnit(?Unit $unit): selfUnitPhoto::getImage()
public function getImage(): ?stringUnitPhoto::getImageFile()
public function getImageFile()UnitPhoto::setImage()
public function setImage($image): selfUnitPhoto::getCaption()
public function getCaption(): ?stringUnitPhoto::setCaption()
public function setCaption(?string $caption): selfUnitPhoto::getPosition()
public function getPosition(): intUnitPhoto::setPosition()
public function setPosition(?int $position): selfWorkOrder class
class WorkOrder WorkOrder.php:18
Something to fix in a unit: reported by its tenant or the management, given to a contractor, visited, quoted, done, closed. Each step is a line of its timeline (WorkOrderEvent), and each tells the people concerned.
WorkOrder::__construct()
public function __construct(Unit $unit, string $title = '', string $description = '')WorkOrder::__toString()
public function __toString(): stringWorkOrder::getId()
public function getId(): ?intWorkOrder::getUnit()
public function getUnit(): UnitWorkOrder::setUnit()
public function setUnit(Unit $unit): selfWorkOrder::getOrganisation()
public function getOrganisation(): OrganisationWorkOrder::getReportedBy()
public function getReportedBy(): ?UserWorkOrder::setReportedBy()
public function setReportedBy(?User $reportedBy): selfWorkOrder::getTitle()
public function getTitle(): stringWorkOrder::setTitle()
public function setTitle(string $title): selfWorkOrder::getDescription()
public function getDescription(): stringWorkOrder::setDescription()
public function setDescription(string $description): selfWorkOrder::getCategory()
public function getCategory(): stringWorkOrder::setCategory()
public function setCategory(string $category): selfWorkOrder::getUrgency()
public function getUrgency(): UrgencyWorkOrder::setUrgency()
public function setUrgency(Urgency $urgency): selfWorkOrder::getStatus()
public function getStatus(): WorkOrderStatusWorkOrder::setStatus()
public function setStatus(WorkOrderStatus $status): selfWorkOrder::getContractor()
public function getContractor(): ?ContractorWorkOrder::setContractor()
public function setContractor(?Contractor $contractor): selfWorkOrder::getVisitAt()
public function getVisitAt(): ?\DateTimeImmutableWorkOrder::setVisitAt()
public function setVisitAt(?\DateTimeImmutable $visitAt): selfWorkOrder::getQuoteAmount()
public function getQuoteAmount(): ?intWorkOrder::setQuoteAmount()
public function setQuoteAmount(?int $quoteAmount): selfWorkOrder::getInvoiceAmount()
public function getInvoiceAmount(): ?intWorkOrder::setInvoiceAmount()
public function setInvoiceAmount(?int $invoiceAmount): selfWorkOrder::getInvoiceNumber()
public function getInvoiceNumber(): ?stringWorkOrder::setInvoiceNumber()
public function setInvoiceNumber(?string $invoiceNumber): selfWorkOrder::getReport()
public function getReport(): ?stringWorkOrder::setReport()
public function setReport(?string $report): selfWorkOrder::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableWorkOrder::setCreatedAt()
public function setCreatedAt(\DateTimeImmutable $createdAt): selfWorkOrder::getClosedAt()
public function getClosedAt(): ?\DateTimeImmutableWorkOrder::setClosedAt()
public function setClosedAt(?\DateTimeImmutable $closedAt): selfWorkOrder::getEvents()
public function getEvents(): CollectionWorkOrder::addEvent()
public function addEvent(WorkOrderEvent $event): selfWorkOrderEvent class
class WorkOrderEvent WorkOrderEvent.php:9
A line of a work order's timeline: a step, or a note from whoever follows it.
WorkOrderEvent::__construct()
public function __construct(string $authorName, string $body, ?User $author = null)WorkOrderEvent::getId()
public function getId(): ?intWorkOrderEvent::getWorkOrder()
public function getWorkOrder(): ?WorkOrderWorkOrderEvent::setWorkOrder()
public function setWorkOrder(?WorkOrder $workOrder): selfWorkOrderEvent::getAuthor()
public function getAuthor(): ?UserWorkOrderEvent::getAuthorName()
public function getAuthorName(): stringWorkOrderEvent::getBody()
public function getBody(): stringWorkOrderEvent::getCreatedAt()
public function getCreatedAt(): \DateTimeImmutableWorkOrderEvent::setCreatedAt()
public function setCreatedAt(\DateTimeImmutable $createdAt): selfBase\Estate\Enum
ActivityKind enum
enum ActivityKind ActivityKind.php:5
case RENT_CALLED = 'rent_called'case RENT_PAID = 'rent_paid'case RENT_LATE = 'rent_late'case LEASE_STARTED = 'lease_started'case LEASE_ENDED = 'lease_ended'case WORK_REPORTED = 'work_reported'case WORK_ASSIGNED = 'work_assigned'case WORK_DONE = 'work_done'case DOCUMENT = 'document'case NOTICE = 'notice'case OTHER = 'other'
ActivityKind::icon()
public function icon(): stringApplicationStatus enum
enum ApplicationStatus ApplicationStatus.php:6
Where an application stands: received, shortlisted, invited to visit, accepted (a lease follows) or declined.
case NEW = 'new'case SHORTLISTED = 'shortlisted'case VISIT = 'visit'case ACCEPTED = 'accepted'case DECLINED = 'declined'
ApplicationStatus::isOpen()
public function isOpen(): boolAssociateQuality enum
enum AssociateQuality AssociateQuality.php:5
case MANAGER = 'manager'Runs the company (gérant·e).
case ASSOCIATE = 'associate'
DocumentKind enum
enum DocumentKind DocumentKind.php:6
What a document is: the lease's papers, the tenant's insurance, a contractor's quote, invoice or photo.
case LEASE = 'lease'case INVENTORY = 'inventory'case DIAGNOSTIC = 'diagnostic'case RULES = 'rules'case INSURANCE = 'insurance'case QUOTE = 'quote'case INVOICE = 'invoice'case PHOTO = 'photo'case OTHER = 'other'
DocumentKind::icon()
public function icon(): stringDocumentKind::work()
public static function work(): arrayThe kinds a contractor attaches to a work order.
Guarantee enum
enum Guarantee Guarantee.php:6
Who stands surety for an applicant: Action Logement's free Visale, a person, a company or bank, or nobody.
case VISALE = 'visale'case PERSON = 'person'case COMPANY = 'company'case NONE = 'none'
InvitationKind enum
enum InvitationKind InvitationKind.php:6
What accepting an invitation opens: the target it was made for gets the new account.
case MEMBER = 'member'case ASSOCIATE = 'associate'case TENANT = 'tenant'case CONTRACTOR = 'contractor'
LeaseStatus enum
enum LeaseStatus LeaseStatus.php:5
case ACTIVE = 'active'case NOTICE = 'notice'The tenant gave notice: the lease runs until its end date.
case ENDED = 'ended'
Occupation enum
enum Occupation Occupation.php:6
An applicant's work situation, as a landlord weighs a file.
case PERMANENT = 'permanent'case FIXED_TERM = 'fixed_term'case CIVIL_SERVANT = 'civil_servant'case SELF_EMPLOYED = 'self_employed'case STUDENT = 'student'case RETIRED = 'retired'case JOB_SEEKER = 'job_seeker'case OTHER = 'other'
PartyRole enum
enum PartyRole PartyRole.php:6
Who someone is on a lease.
case TENANT = 'tenant'case COTENANT = 'cotenant'case GUARANTOR = 'guarantor'
PaymentMethod enum
enum PaymentMethod PaymentMethod.php:5
case TRANSFER = 'transfer'case CARD = 'card'case SEPA_DEBIT = 'sepa_debit'case CHEQUE = 'cheque'case CASH = 'cash'
PaymentMethod::isOnline()
public function isOnline(): boolPaid through the payment provider: it lands on the clearing account (5112) until the payout.
RentStatus enum
enum RentStatus RentStatus.php:5
case CALLED = 'called'case PARTIAL = 'partial'case PAID = 'paid'case LATE = 'late'
RentStatus::isOpen()
public function isOpen(): boolUnitKind enum
enum UnitKind UnitKind.php:5
case HOUSE = 'house'case APARTMENT = 'apartment'case STUDIO = 'studio'case PARKING = 'parking'case COMMERCIAL = 'commercial'
Urgency enum
enum Urgency Urgency.php:5
case LOW = 'low'case NORMAL = 'normal'case URGENT = 'urgent'
WorkOrderStatus enum
enum WorkOrderStatus WorkOrderStatus.php:5
case REPORTED = 'reported'case ASSIGNED = 'assigned'case SCHEDULED = 'scheduled'case DONE = 'done'case CLOSED = 'closed'case CANCELLED = 'cancelled'
WorkOrderStatus::isOpen()
public function isOpen(): boolBase\Estate\Form
ApplicationType class
final class ApplicationType extends AbstractType ApplicationType.php:28
Applying for a free home: who, how many, from when, situation and income, guarantee,
the DossierFacile link, a word - and the consent to the file being kept (three months
after the decision). website is a trap for robots.
ApplicationType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidApplicationType::getBlockPrefix()
public function getBlockPrefix(): stringApplicationType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidContractorUpdateType class
final class ContractorUpdateType extends AbstractType ContractorUpdateType.php:15
What a contractor says of a job: when they come, their quote, what they did, their invoice.
ContractorUpdateType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidContractorUpdateType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidInsuranceType class
final class InsuranceType extends AbstractType InsuranceType.php:13
A tenant sends this year's certificate of home insurance: the file, and until when it covers them.
InsuranceType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidInsuranceType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidInvitationAcceptType class
final class InvitationAcceptType extends AbstractType InvitationAcceptType.php:14
The account an invitation creates: a username, a password typed twice.
InvitationAcceptType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidInvitationAcceptType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidMessageType class
final class MessageType extends AbstractType MessageType.php:12
A message in a lease's thread, from a tenant or from the management.
MessageType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidMessageType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidReportType class
final class ReportType extends AbstractType ReportType.php:16
A tenant reports a problem: what, where, how urgent.
const CATEGORIES = ['Plomberie', 'Chauffage', 'Électricité', 'Serrurerie', 'Menuiserie', 'Humidité', 'Parties communes', 'Autre']
ReportType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidReportType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidVisitRequestType class
final class VisitRequestType extends AbstractType VisitRequestType.php:14
"Demander une visite", on a unit's page. The last field is a trap for robots.
VisitRequestType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidVisitRequestType::getBlockPrefix()
public function getBlockPrefix(): stringVisitRequestType::configureOptions()
public function configureOptions(\Symfony\Component\OptionsResolver\OptionsResolver $resolver): voidWorkFileType class
final class WorkFileType extends AbstractType WorkFileType.php:15
A contractor adds a quote, an invoice or a photo to a work order.
WorkFileType::buildForm()
public function buildForm(FormBuilderInterface $builder, array $options): voidWorkFileType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidBase\Estate\Ledger
AssociateBookAccess class
final class AssociateBookAccess implements BookAccessInterface AssociateBookAccess.php:17
An associate reads their company's books (omnibase/ledger); its management keeps them. Only loaded with omnibase/ledger.
AssociateBookAccess::__construct()
public function __construct(readonly Spaces $spaces, readonly EntityManagerInterface $entityManager)AssociateBookAccess::canView()
public function canView(UserInterface $user, Book $book): boolAssociateBookAccess::canManage()
public function canManage(UserInterface $user, Book $book): boolBankSettlement class
final class BankSettlement BankSettlement.php:19
A tenant's transfer, seen at the bank and reconciled with their rent call (omnibase/ledger): the rent call is paid - its receipt numbered and sent - without posting it a second time. The open items it cleared say which call: their entries' source ("estate:rent:<reference>").
Only loaded with omnibase/ledger.
BankSettlement::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly Payments $payments)BankSettlement::__invoke()
public function __invoke(BankLineReconciled $event): voidCompanyAccounts class
final class CompanyAccounts CompanyAccounts.php:22
The company's accounts as its associates read them (omnibase/ledger, through the organisation's book): the year's income statement so far and the year before, each associate's share of the result - an SCI is transparent: each declares their share (2072, then their own return) -, the bank accounts' balances and their latest movements. Only loaded with omnibase/ledger.
CompanyAccounts::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly IncomeStatement $income, readonly BankAccountRepository $bankAccounts, readonly BankLineRepository $bankLines, readonly EntryLineRepository $entryLines)CompanyAccounts::of()
public function of(Organisation $organisation, array $associates, ?\DateTimeImmutable $today = null): ?arrayBase\Estate\Model
ApplicationRequest class
final class ApplicationRequest ApplicationRequest.php:12
What the application form asks (ApplicationType), before it becomes an Application.
public ?string $firstName = nullpublic ?string $lastName = nullpublic ?string $email = nullpublic ?string $phone = nullpublic ?int $occupants = 1public ?\DateTimeImmutable $moveInOn = nullpublic ?Occupation $occupation = Occupation::PERMANENTpublic ?int $income = nullNet monthly income of the household, in cents.
public ?Guarantee $guarantee = Guarantee::NONEpublic ?string $dossierUrl = nullpublic ?string $message = null
ApplicationRequest::toApplication()
public function toApplication(Unit $unit): ApplicationBase\Estate\Repository
ActivityRepository class
class ActivityRepository extends ServiceEntityRepository ActivityRepository.php:11
ActivityRepository::__construct()
public function __construct(ManagerRegistry $registry)ActivityRepository::latest()
public function latest(Organisation $organisation, int $limit = 12): array- Returns
the latest first
ApplicationRepository class
class ApplicationRepository extends ServiceEntityRepository ApplicationRepository.php:13
ApplicationRepository::__construct()
public function __construct(ManagerRegistry $registry)ApplicationRepository::openFor()
public function openFor(Unit $unit): array- Returns
a home's applications still open, the oldest first
ApplicationRepository::countNew()
public function countNew(Organisation $organisation): intNew applications not looked at yet, for the dashboard.
ApplicationRepository::expired()
public function expired(int $months = 3): array- Returns
decided more than $months ago: to delete
DocumentRepository class
class DocumentRepository extends ServiceEntityRepository DocumentRepository.php:12
DocumentRepository::__construct()
public function __construct(ManagerRegistry $registry)DocumentRepository::forTenants()
public function forTenants(Lease $lease): arrayWhat a lease's tenants see: the lease's documents and its home's, those shared with them.
DocumentRepository::forWorkOrder()
public function forWorkOrder(WorkOrder $order): arrayLeaseRepository class
class LeaseRepository extends ServiceEntityRepository LeaseRepository.php:13
LeaseRepository::__construct()
public function __construct(ManagerRegistry $registry)LeaseRepository::findRunningIn()
public function findRunningIn(\DateTimeImmutable $month, ?Organisation $organisation = null): array- Returns
the leases running during a month, to be called
LeaseRepository::findForUser()
public function findForUser(User $user): array- Returns
the leases someone is a party of, the running ones first
MessageRepository class
class MessageRepository extends ServiceEntityRepository MessageRepository.php:12
MessageRepository::__construct()
public function __construct(ManagerRegistry $registry)MessageRepository::thread()
public function thread(Lease $lease): array- Returns
a lease's thread, oldest first
MessageRepository::threads()
public function threads(Organisation $organisation): arrayThe threads of a company's leases, the latest first, with how many tenant messages the management has not read.
MessageRepository::unreadByManagement()
public function unreadByManagement(Organisation $organisation): intTenant messages the management has not read yet, for the back office's badge.
OrganisationRepository class
class OrganisationRepository extends ServiceEntityRepository OrganisationRepository.php:10
OrganisationRepository::__construct()
public function __construct(ManagerRegistry $registry)RentCallRepository class
class RentCallRepository extends ServiceEntityRepository RentCallRepository.php:12
RentCallRepository::__construct()
public function __construct(ManagerRegistry $registry)RentCallRepository::findOverdue()
public function findOverdue(\DateTimeImmutable $today, ?Organisation $organisation = null): array- Returns
unpaid, due before a day
RentCallRepository::findForOrganisation()
public function findForOrganisation(Organisation $organisation, \DateTimeImmutable $from, \DateTimeImmutable $to): array- Returns
an organisation's calls between two months (inclusive), oldest first
RentCallRepository::lastReceiptNumber()
public function lastReceiptNumber(string $prefix): ?stringUnitRepository class
class UnitRepository extends ServiceEntityRepository UnitRepository.php:11
UnitRepository::__construct()
public function __construct(ManagerRegistry $registry)UnitRepository::findPublished()
public function findPublished(?string $kind = null, bool $availableOnly = false): array- Returns
what the public site lists: published, free ones first
UnitRepository::findByOrganisation()
public function findByOrganisation(Organisation $organisation): arrayWorkOrderRepository class
class WorkOrderRepository extends ServiceEntityRepository WorkOrderRepository.php:13
WorkOrderRepository::__construct()
public function __construct(ManagerRegistry $registry)WorkOrderRepository::findOpen()
public function findOpen(Organisation $organisation): arrayWorkOrderRepository::findForContractors()
public function findForContractors(array $contractors): array$contractors@return list<WorkOrder>
WorkOrderRepository::spent()
public function spent(Organisation $organisation, \DateTimeImmutable $from, \DateTimeImmutable $to): intSpent on works over a period, in cents (closed orders' invoices).
Base\Estate\Security\Voter
EstateVoter class
final class EstateVoter extends Voter EstateVoter.php:23
What each person may open, from what they are to the organisation (Spaces): its management everything of it; an associate its figures and feed; a tenant their lease, its rents and the problems they reported; a contractor the work orders given to them - nothing else.
const MANAGE = 'ESTATE_MANAGE'const ASSOCIATE = 'ESTATE_ASSOCIATE'const LEASE_VIEW = 'ESTATE_LEASE_VIEW'const RENT_VIEW = 'ESTATE_RENT_VIEW'const UNIT_REPORT = 'ESTATE_UNIT_REPORT'const WORK_VIEW = 'ESTATE_WORK_VIEW'const WORK_DO = 'ESTATE_WORK_DO'const DOCUMENT_VIEW = 'ESTATE_DOCUMENT_VIEW'
EstateVoter::__construct()
public function __construct(readonly Spaces $spaces)Base\Estate\Service
Activities class
class Activities Activities.php:12
Writes the associates' feed: one line per thing that happened. Persisted, not flushed.
Activities::__construct()
public function __construct(readonly EntityManagerInterface $entityManager)Activities::log()
public function log(Organisation $organisation, ActivityKind $kind, string $message, ?Unit $unit = null, ?int $amount = null, ?\DateTimeImmutable $at = null): ActivityApplications class
class Applications Applications.php:21
Applications to rent a free home, from received to let: the applicant is told at every step by e-mail (received, invited to visit, declined); the management is told of each new one. Accepting one makes the lease - the applicant its tenant, the home's rent, charges and deposit, starting on the date they asked - takes the home off the market and, when asked, declines the others. Decided applications are deleted three months on (purge).
Applications::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly ApplicationRepository $applications, readonly Activities $activities, readonly EstateMailer $mailer)Applications::submit()
public function submit(Application $application): ApplicationApplications::shortlist()
public function shortlist(Application $application): voidApplications::inviteToVisit()
public function inviteToVisit(Application $application, \DateTimeImmutable $at, ?string $message = null): voidThe applicant invited to visit at $at, with the management's words.
Applications::decline()
public function decline(Application $application, ?string $message = null, bool $notify = true): voidDeclined, and told so politely (the management's words added, when it has some).
Applications::accept()
public function accept(Application $application, \DateTimeImmutable $startOn, bool $declineOthers = false): LeaseAccepted: the lease made (the applicant its tenant, from the date they asked or $startOn), the home no longer offered, and - with $declineOthers - the other open applications declined.
Applications::purge()
public function purge(int $months = 3): intApplications decided more than three months ago, deleted: how many.
Books class
class Books Books.php:26
The organisation's books (omnibase/ledger), when it keeps them here: a rent call is a receivable (411 / 706 rent, 708 charges), a payment settles it (512 for a transfer, 5112 for a card or SEPA payment until the provider's payout), a work invoice is a supplier debt (615 / 401). Each posting carries its source, so nothing is posted twice.
Only loaded when omnibase/ledger is installed (config/services.php).
Books::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly Posting $posting, readonly Parties $parties, readonly Lettering $lettering)Books::bookFor()
public function bookFor(Organisation $organisation): ?BookBooks::rentCalled()
public function rentCalled(RentCall $call): voidBooks::paymentReceived()
public function paymentReceived(Payment $payment): voidBooks::workInvoiced()
public function workInvoiced(WorkOrder $order): voidCompanyRecords class
final class CompanyRecords CompanyRecords.php:18
A company's identity as the State's registers hold it, read from its SIREN through glitchr/omnistate: its legal name and form, its head office and its creation date from Sirene / RNE (omnistate/annuaire-entreprises), its VAT number from VIES (omnistate/vies) - none when VIES does not know it, as for an SCI letting homes, which is not liable. Loaded only with glitchr/omnistate.
CompanyRecords::__construct()
public function __construct(readonly Omnistate $omnistate, readonly EntityManagerInterface $entityManager)CompanyRecords::refresh()
public function refresh(Organisation $organisation): boolFills the organisation from the registers and saves it. False when it has no valid SIREN or the register does not know it; a register that does not answer throws (UnavailableException), and nothing is changed.
- Throws
UnavailableException
Documents class
class Documents Documents.php:20
The files people add from their space: a tenant's insurance certificate (the lease's insurance date follows), a contractor's quote, invoice or photos (the work order's amounts follow). Each lands in the activity feed and, when it is not the management's own, in its mailbox.
Documents::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly Activities $activities, readonly EstateMailer $mailer)Documents::insurance()
public function insurance(Lease $lease, File $file, \DateTimeImmutable $until, User $user, string $name): DocumentA tenant's certificate of home insurance, valid until $until: the lease's insurance date moves with it.
Documents::work()
public function work(WorkOrder $order, DocumentKind $kind, File $file, ?string $title, User $user, string $name, bool $tenantVisible = false): DocumentA contractor's file on a work order: a quote, an invoice (its amount and number then on the order) or a photo.
EstateMailer class
class EstateMailer EstateMailer.php:11
The e-mails to tenants, associates, contractors and the management: @Estate/email/<name>.html.twig.
EstateMailer::__construct()
public function __construct(readonly MailerInterface $mailer, readonly ?string $from = null)EstateMailer::send()
public function send(string|array $to, string $subject, string $template, array $context = [], ?string $replyTo = null, array $attachments = []): voidFigures class
class Figures Figures.php:19
An organisation in numbers, for its associates and its back office: what is let, what was called and received this year, what is late, the last months side by side, what works cost, how rents are paid.
Figures::__construct()
public function __construct(readonly UnitRepository $units, readonly RentCallRepository $calls, readonly WorkOrderRepository $workOrders, readonly EntityManagerInterface $entityManager)Figures::of()
public function of(Organisation $organisation, ?\DateTimeImmutable $today = null): arrayInvitations class
class Invitations extends BaseInvitations Invitations.php:26
Nobody signs up: the management invites. An invitation names what it opens (an associate, a lease's party, a contractor, the management team); its link creates the account - or, for someone who has one, attaches it.
The token, its hash, the expiry, the lookup and the new account are glitchr/omnibase's Base\Service\Invitations; this says what an estate invitation opens and what accepting it does.
Invitations::__construct()
public function __construct(EntityManagerInterface $entityManager, readonly EstateMailer $mailer, readonly UrlGeneratorInterface $urls, readonly int $days = 14, string $userClass = 'App\Entity\User')Invitations::invite()
public function invite(Associate|LeaseParty|Contractor|Member $target, ?User $by = null, bool $send = true): array- Returns
the invitation and its token (sent, never stored)
Invitations::find()
public function find(string $token): ?InvitationInvitations::target()
public function target(Invitation $invitation): Associate|LeaseParty|Contractor|Member|nullInvitations::accept()
public function accept(Invitation $invitation, User $user): voidThe invitation's account, attached to what it opens.
Messages class
class Messages Messages.php:16
The thread between a lease's tenants and the management: a message is kept, then e-mailed to the other side - the management's address, or every tenant of the lease. Reading a thread marks the other side's messages read.
Messages::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly MessageRepository $messages, readonly EstateMailer $mailer)Messages::post()
public function post(Lease $lease, string $body, bool $fromManagement, ?User $author, string $authorName): MessageMessages::read()
public function read(Lease $lease, bool $byManagement): arrayThe thread as one side reads it: the other side's messages marked read.
OnlinePayments class
class OnlinePayments OnlinePayments.php:18
A rent paid online through omnitrade (Stripe Checkout: card or SEPA debit): the tenant goes to the provider's page, comes back, and the payment is recorded once the provider says it is paid. Off when no gateway is configured or omnitrade is not installed.
OnlinePayments::__construct()
public function __construct(readonly Payments $payments, readonly ?Registry $registry = null, readonly ?string $gateway = 'stripe', readonly array $methods = ['card', 'sepa_debit'])OnlinePayments::isAvailable()
public function isAvailable(): boolOnlinePayments::methods()
public function methods(): arrayOnlinePayments::start()
public function start(RentCall $call, string $method, string $returnUrl, string $cancelUrl, ?string $email = null): stringWhere to send the tenant: the provider's page.
OnlinePayments::complete()
public function complete(RentCall $call, string $reference): boolBack from the provider: recorded when it is paid (SEPA debits come later, through the webhook or the next look).
Payments class
class Payments Payments.php:16
Money received for a rent: recorded once per reference, posted to the books, and - the rent paid in full - its receipt numbered and sent.
Payments::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly RentCallRepository $calls, readonly Activities $activities, readonly EstateMailer $mailer, readonly Receipts $receipts, readonly ?Books $books = null)Payments::record()
public function record(RentCall $call, int $amount, PaymentMethod $method, ?\DateTimeImmutable $paidOn = null, ?string $reference = null, bool $notify = true, bool $post = true): Payment$postfalse when the books have it already (a bank line reconciled against the rent call)
Payments::method()
public function method(PaymentMethod $method): stringReceipts class
class Receipts Receipts.php:15
Receipts (quittances): numbered per year in the order rents are paid ("Q-2026-0007"), drawn from @Estate/pdf/receipt.html.twig, as a PDF when dompdf is installed.
Receipts::__construct()
public function __construct(readonly RentCallRepository $calls, readonly Environment $twig)Receipts::number()
public function number(RentCall $call): stringReceipts::html()
public function html(RentCall $call, string $kind = 'receipt'): stringReceipts::pdf()
public function pdf(RentCall $call, string $kind = 'receipt'): ?stringThe PDF's bytes, or null without dompdf.
Receipts::attestationHtml()
public function attestationHtml(Lease $lease, \DateTimeImmutable $on): stringThe certificate a tenant hands a bank, the CAF or a future landlord: they live in the home since the lease's start, at this rent, and owe nothing today.
Receipts::attestationPdf()
public function attestationPdf(Lease $lease, \DateTimeImmutable $on): ?stringRentCalls class
class RentCalls RentCalls.php:20
The monthly rent: a call per running lease (once per month, whatever runs it twice), posted to the books, sent to the tenants; then, past its due date, marked late and reminded.
RentCalls::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly LeaseRepository $leases, readonly RentCallRepository $calls, readonly Activities $activities, readonly EstateMailer $mailer, readonly ?Books $books = null, readonly int $reminderDays = 5)RentCalls::call()
public function call(\DateTimeImmutable $month, ?Organisation $organisation = null, bool $notify = true): array- Returns
the calls made (none twice for a lease and a month)
RentCalls::callOne()
public function callOne(Lease $lease, \DateTimeImmutable $month, bool $notify = true): ?RentCallRentCalls::markLate()
public function markLate(\DateTimeImmutable $today, bool $remind = true): array- Returns
the calls past due, now marked late; reminded once after reminder_days
RentCalls::month()
public function month(\DateTimeImmutable $period): stringRentRevisions class
class RentRevisions RentRevisions.php:19
The yearly rent revision of a French residential lease (loi du 6 juillet 1989, art. 17-1): on the lease's anniversary, the rent (charges aside) follows the IRL - the new rent is the rent times the new quarter's index over the lease's reference index, never more. The reference then becomes the new quarter; the tenants get the letter; the next rent calls carry the new rent.
RentRevisions::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly LeaseRepository $leases, readonly Activities $activities, readonly EstateMailer $mailer)RentRevisions::nextOn()
public function nextOn(Lease $lease, ?\DateTimeImmutable $today = null): \DateTimeImmutableThe next anniversary the rent can be revised on: a year after the start or the last revision.
RentRevisions::rentAt()
public function rentAt(Lease $lease, string $newIndex): intThe rent (cents, charges aside) at the new index.
RentRevisions::apply()
public function apply(Lease $lease, string $newQuarter, string $newIndex, \DateTimeImmutable $on, ?User $by = null): intThe revision applied: the new rent from $on, the new reference index, the activity line and the tenants' letter. Returns the former rent.
RentRevisions::due()
public function due(int $days = 45): arrayThe running leases whose revision falls within $days and that have a reference index - for the back office's dashboard.
Spaces class
class Spaces implements ResetInterface Spaces.php:22
Who someone is to the organisations: their management (a Member, or any ROLE_ADMIN), an associate, a tenant (a party of a lease), a contractor.
What each space shows, and what EstateVoter allows, comes from here - from the relations, never from a role stored on the account.
Spaces::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly LeaseRepository $leases, readonly Security $security)Spaces::managed()
public function managed(?User $user): array- Returns
those whose back office they run
Spaces::manages()
public function manages(?User $user, Organisation $organisation): boolSpaces::reset()
public function reset(): voidForgotten between requests (a worker, the tests): who someone is may change.
Spaces::associateships()
public function associateships(?User $user): arraySpaces::isAssociateOf()
public function isAssociateOf(?User $user, Organisation $organisation): boolSpaces::tenancies()
public function tenancies(?User $user): arraySpaces::isPartyOf()
public function isPartyOf(?User $user, Lease $lease): boolSpaces::contractorships()
public function contractorships(?User $user): arraySpaces::of()
public function of(?User $user): arrayThe spaces the header and "Mon accès" offer, in this order.
WorkOrders class
class WorkOrders WorkOrders.php:22
A problem from its report to its invoice: reported (by the tenant or the management), given to a contractor, visited, done, closed. Every step is a line of its timeline, a line of the associates' feed, and an e-mail to whoever it concerns.
WorkOrders::__construct()
public function __construct(readonly EntityManagerInterface $entityManager, readonly Activities $activities, readonly EstateMailer $mailer, readonly ?Books $books = null)WorkOrders::report()
public function report(Unit $unit, ?User $by, string $byName, string $title, string $description, string $category = 'Autre', Urgency $urgency = Urgency::NORMAL): WorkOrderWorkOrders::assign()
public function assign(WorkOrder $order, Contractor $contractor, ?\DateTimeImmutable $visitAt, ?User $by, string $byName = 'Gestion', ?string $note = null): voidWorkOrders::update()
public function update(WorkOrder $order, ?User $by, string $byName, ?\DateTimeImmutable $visitAt = null, ?int $quote = null, ?string $report = null, bool $done = false, ?int $invoice = null, ?string $invoiceNumber = null): voidWhat the contractor says: a visit date, a quote, their report; done when they say so.
WorkOrders::note()
public function note(WorkOrder $order, ?User $by, string $byName, string $body): voidWorkOrders::close()
public function close(WorkOrder $order, ?User $by, string $byName = 'Gestion'): voidClosed by the management: the invoice, if any, goes to the books.
Base\Estate\Twig
EstateExtension class
class EstateExtension EstateExtension.php:12
The spaces the header offers, and money in euros as the pages write it.
EstateExtension::__construct()
public function __construct(readonly Spaces $spaces, readonly Security $security, readonly OnlinePayments $online)EstateExtension::spaces()
public function spaces(): arrayEstateExtension::onlinePayment()
public function onlinePayment(): boolEstateExtension::euros()
public function euros(?int $cents, bool $round = false): string123456 → "1 234,56 €" (cents in); round drops the cents.