Skip to content

omnibase/estate API reference

Floor
Prepared structure · Omnibase
Version
main
Verified for real
Its README does not say
Licence
MIT
composer require omnibase/estate:dev-main

Read from the package's own PHP files at the commit cb07b7c8bf33: its namespaces, classes, interfaces and enums, their public constants, properties and methods with their PHPDoc, and the options its factories take. Nothing of it is run.

Base\Estate

  • EstateBundle class

    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.

    3 methods

Base\Estate\Admin\Widget

  • OverviewWidgetType class

    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.

    4 methods

  • PaymentsWidgetType class

    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.

    4 methods

Base\Estate\Command

  • ApplicationPurgeCommand class

    Applications decided (accepted or declined) more than three months ago, deleted - the CNIL's guidance for applicants' files: cron, daily.

    1 method

  • CompanyRefreshCommand class

    Every company's identity read again from the registers (Sirene / RNE, VIES), by its SIREN: cron, weekly.

    1 method

  • RentCallCommand class

    The month's rents called (and their notices sent): cron, on the 25th for the next month. Run twice, it calls nothing twice.

    1 method

  • RentLateCommand class

    Rents past due marked late, and their tenants reminded once (estate.reminder_days after the due date): cron, daily.

    1 method

Base\Estate\Controller\Admin

  • ActionController class

    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.

    10 methods

  • MessageController class

    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.

    3 methods

Base\Estate\Controller\Admin\Crud

Base\Estate\Controller\Client

  • AssociateController class

    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.

    2 methods

  • ContractorController class

    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.

    3 methods

  • DocumentController class

    A document's file, streamed to whoever may open it (EstateVoter::DOCUMENT_VIEW): the uploads stay out of public/.

    1 method

  • InvitationController class

    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.

    1 method

  • TenantController class

    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.

    6 methods

  • UnitController class

    The 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

Base\Estate\Entity

  • Activity class

    A line of the company's day-to-day, as its associates read it: a rent paid, a boiler replaced.

    9 methods

  • Application class

    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.

    41 methods

  • Associate class

    A partner of the company: their shares, their quality, and - once they accepted their invitation - the account that opens the associates' space.

    29 methods

  • Building class

    A building some units are in: its address, its year, its common parts.

    17 methods

  • Contractor class

    A tradesperson the organisation calls on: their company, their trade, and their account once invited.

    21 methods

  • Deadline class

    A date the company must not miss: the property tax, the general meeting, an insurance renewal.

    14 methods

  • Document class

    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.

    26 methods

  • Invitation class

    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.

    6 methods

  • Lease class

    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.

    44 methods

  • LeaseParty class

    Someone on a lease: a tenant, a co-tenant, a guarantor - and, once invited, their account.

    20 methods

  • Member class

    Someone of the management team of an organisation: they run its back office.

    13 methods

  • Message class

    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.

    10 methods

  • Notice class

    A word to the tenants of a building, or of all the units: a water cut, works on the stairs.

    14 methods

  • Organisation class

    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.

    34 methods

  • Payment class

    Money received for a rent call: a transfer seen at the bank, a card or SEPA payment online, a cheque.

    8 methods

  • RentCall class

    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.

    28 methods

  • Unit class

    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.

    67 methods

  • UnitPhoto class

    A photograph of a unit, in its gallery's order.

    11 methods

  • WorkOrder class

    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.

    36 methods

  • WorkOrderEvent class

    A line of a work order's timeline: a step, or a note from whoever follows it.

    9 methods

Base\Estate\Enum

  • ActivityKind enum

    1 method · 11 cases

  • ApplicationStatus enum

    Where an application stands: received, shortlisted, invited to visit, accepted (a lease follows) or declined.

    1 method · 5 cases

  • AssociateQuality enum

    2 cases

  • DocumentKind enum

    What a document is: the lease's papers, the tenant's insurance, a contractor's quote, invoice or photo.

    2 methods · 9 cases

  • Guarantee enum

    Who stands surety for an applicant: Action Logement's free Visale, a person, a company or bank, or nobody.

    4 cases

  • InvitationKind enum

    What accepting an invitation opens: the target it was made for gets the new account.

    4 cases

  • LeaseStatus enum

    3 cases

  • Occupation enum

    An applicant's work situation, as a landlord weighs a file.

    8 cases

  • PartyRole enum

    Who someone is on a lease.

    3 cases

  • PaymentMethod enum

    1 method · 5 cases

  • RentStatus enum

    1 method · 4 cases

  • UnitKind enum

    5 cases

  • Urgency enum

    3 cases

  • WorkOrderStatus enum

    1 method · 6 cases

Base\Estate\Form

  • ApplicationType class

    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.

    3 methods

  • ContractorUpdateType class

    What a contractor says of a job: when they come, their quote, what they did, their invoice.

    2 methods

  • InsuranceType class

    A tenant sends this year's certificate of home insurance: the file, and until when it covers them.

    2 methods

  • InvitationAcceptType class

    The account an invitation creates: a username, a password typed twice.

    2 methods

  • MessageType class

    A message in a lease's thread, from a tenant or from the management.

    2 methods

  • ReportType class

    A tenant reports a problem: what, where, how urgent.

    2 methods · 1 constant

  • VisitRequestType class

    "Demander une visite", on a unit's page. The last field is a trap for robots.

    3 methods

  • WorkFileType class

    A contractor adds a quote, an invoice or a photo to a work order.

    2 methods

Base\Estate\Ledger

  • AssociateBookAccess class

    An associate reads their company's books (omnibase/ledger); its management keeps them. Only loaded with omnibase/ledger.

    3 methods

  • BankSettlement class

    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>").

    2 methods

  • CompanyAccounts class

    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.

    2 methods

Base\Estate\Model

  • ApplicationRequest class

    What the application form asks (ApplicationType), before it becomes an Application.

    1 method · 11 properties

Base\Estate\Repository

Base\Estate\Security\Voter

  • EstateVoter class

    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.

    1 method · 8 constants

Base\Estate\Service

  • Activities class

    Writes the associates' feed: one line per thing that happened. Persisted, not flushed.

    2 methods

  • Applications class

    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).

    7 methods

  • Books class

    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.

    5 methods

  • CompanyRecords class

    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.

    2 methods

  • Documents class

    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.

    3 methods

  • EstateMailer class

    The e-mails to tenants, associates, contractors and the management: @Estate/email/<name>.html.twig.

    2 methods

  • Figures class

    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.

    2 methods

  • Invitations class

    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.

    5 methods

  • Messages class

    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.

    3 methods

  • OnlinePayments class

    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.

    5 methods

  • Payments class

    Money 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

  • Receipts class

    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.

    6 methods

  • RentCalls class

    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.

    5 methods

  • RentRevisions class

    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.

    5 methods

  • Spaces class

    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.

    10 methods

  • WorkOrders class

    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.

    6 methods

Base\Estate\Twig

  • EstateExtension class

    The 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(): string

The bundle root is the package root: ./templates is @Estate, ./src/Entity is mapped.

EstateBundle::build()

public function build(ContainerBuilder $container): void

Base\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(): string

OverviewWidgetType::getTemplate()

public function getTemplate(): string

OverviewWidgetType::getTemplateVars()

public function getTemplateVars(MenuItem $widget): array

PaymentsWidgetType 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(): string

PaymentsWidgetType::getTemplate()

public function getTemplate(): string

PaymentsWidgetType::getTemplateVars()

public function getTemplateVars(MenuItem $widget): array

Base\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): RedirectResponse

ActionController::call()

public function call(Request $request, RentCalls $rents): RedirectResponse

ActionController::payment()

public function payment(Request $request, RentCall $call, Payments $payments): Response

ActionController::assign()

public function assign(Request $request, WorkOrder $order, WorkOrders $orders): Response

ActionController::close()

public function close(Request $request, WorkOrder $order, WorkOrders $orders): RedirectResponse

ActionController::send()

public function send(Request $request, Notice $notice, EstateMailer $mailer, Activities $activities): RedirectResponse

ActionController::application()

public function application(Request $request, Application $application, string $do, Applications $applications): Response

An 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): Response

The 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): RedirectResponse

The 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): Response

MessageController::thread()

public function thread(Request $request, Lease $lease, Messages $messages): Response

Base\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): void

AbstractEstateCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

AbstractEstateCrudController::configureActions()

public function configureActions(Actions $actions): Actions

The management (ROLE_ADMIN) runs these screens - not only the super-admin, the admin's default.

AbstractEstateCrudController::createEntity()

public function createEntity(string $entityFqcn): object

A 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(): string

ActivityCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

ActivityCrudController::configureActions()

public function configureActions(Actions $actions): Actions

ActivityCrudController::configureFields()

public function configureFields(string $pageName): iterable

ApplicationCrudController 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(): string

ApplicationCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

ApplicationCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

ApplicationCrudController::configureActions()

public function configureActions(Actions $actions): Actions

ApplicationCrudController::configureFields()

public function configureFields(string $pageName): iterable

AssociateCrudController 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(): string

AssociateCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

AssociateCrudController::configureActions()

public function configureActions(Actions $actions): Actions

AssociateCrudController::configureFields()

public function configureFields(string $pageName): iterable

BuildingCrudController class

class BuildingCrudController extends AbstractEstateCrudController BuildingCrudController.php:11

BuildingCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

BuildingCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

BuildingCrudController::configureFields()

public function configureFields(string $pageName): iterable

ContractorCrudController class

class ContractorCrudController extends AbstractEstateCrudController ContractorCrudController.php:12

ContractorCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

ContractorCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

ContractorCrudController::configureActions()

public function configureActions(Actions $actions): Actions

ContractorCrudController::configureFields()

public function configureFields(string $pageName): iterable

DeadlineCrudController class

class DeadlineCrudController extends AbstractEstateCrudController DeadlineCrudController.php:12

DeadlineCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

DeadlineCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

DeadlineCrudController::configureFields()

public function configureFields(string $pageName): iterable

DocumentCrudController 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(): string

DocumentCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

DocumentCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

DocumentCrudController::configureFields()

public function configureFields(string $pageName): iterable

DocumentCrudController::createEntity()

public function createEntity(string $entityFqcn): Document

InvitationCrudController class

class InvitationCrudController extends AbstractEstateCrudController InvitationCrudController.php:11

InvitationCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

InvitationCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

InvitationCrudController::configureActions()

public function configureActions(Actions $actions): Actions

InvitationCrudController::configureFields()

public function configureFields(string $pageName): iterable

LeaseCrudController 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(): string

LeaseCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

LeaseCrudController::configureActions()

public function configureActions(Actions $actions): Actions

LeaseCrudController::configureFields()

public function configureFields(string $pageName): iterable

LeasePartyCrudController 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(): string

LeasePartyCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

LeasePartyCrudController::configureActions()

public function configureActions(Actions $actions): Actions

LeasePartyCrudController::configureFields()

public function configureFields(string $pageName): iterable

MemberCrudController 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(): string

MemberCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

MemberCrudController::configureActions()

public function configureActions(Actions $actions): Actions

MemberCrudController::configureFields()

public function configureFields(string $pageName): iterable

NoticeCrudController class

class NoticeCrudController extends AbstractEstateCrudController NoticeCrudController.php:13

NoticeCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

NoticeCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

NoticeCrudController::configureActions()

public function configureActions(Actions $actions): Actions

NoticeCrudController::configureFields()

public function configureFields(string $pageName): iterable

OrganisationCrudController 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(): string

OrganisationCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

OrganisationCrudController::configureActions()

public function configureActions(Actions $actions): Actions

OrganisationCrudController::configureFields()

public function configureFields(string $pageName): iterable

PaymentCrudController class

class PaymentCrudController extends AbstractEstateCrudController PaymentCrudController.php:13

PaymentCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

PaymentCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

PaymentCrudController::configureActions()

public function configureActions(Actions $actions): Actions

PaymentCrudController::configureFields()

public function configureFields(string $pageName): iterable

RentCallCrudController 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(): string

RentCallCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

RentCallCrudController::configureActions()

public function configureActions(Actions $actions): Actions

RentCallCrudController::configureFields()

public function configureFields(string $pageName): iterable

UnitCrudController 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(): string

UnitCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

UnitCrudController::configureFields()

public function configureFields(string $pageName): iterable

UnitPhotoCrudController class

class UnitPhotoCrudController extends AbstractEstateCrudController UnitPhotoCrudController.php:11

UnitPhotoCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

UnitPhotoCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

UnitPhotoCrudController::configureFields()

public function configureFields(string $pageName): iterable

WorkOrderCrudController 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(): string

WorkOrderCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

WorkOrderCrudController::configureActions()

public function configureActions(Actions $actions): Actions

WorkOrderCrudController::configureFields()

public function configureFields(string $pageName): iterable

Base\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): Response

ContractorController 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): Response

ContractorController::show()

public function show(Request $request, WorkOrder $order, WorkOrders $orders, Documents $documents, DocumentRepository $documentRepository): Response

DocumentController 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): BinaryFileResponse

InvitationController 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): Response

TenantController 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): Response

TenantController::pay()

public function pay(Request $request, RentCall $call, OnlinePayments $online): Response

TenantController::paid()

public function paid(Request $request, RentCall $call, OnlinePayments $online): Response

TenantController::document()

public function document(RentCall $call, string $kind, Receipts $receipts): Response

The 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): Response

The 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): Response

UnitController::show()

public function show(Request $request, string $slug, UnitRepository $units, EstateMailer $mailer): Response

UnitController::apply()

public function apply(Request $request, string $slug, UnitRepository $units, Applications $applications): Response

Applying 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(): TreeBuilder

EstateExtension class

class EstateExtension extends AbstractBaseExtension EstateExtension.php:11

EstateExtension::getConfiguration()

public function getConfiguration(array $config, ContainerBuilder $container): EstateConfiguration

EstateExtension::load()

public function load(array $configs, ContainerBuilder $container): void

Base\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(): string

Activity::getId()

public function getId(): ?int

Activity::getOrganisation()

public function getOrganisation(): Organisation

Activity::getUnit()

public function getUnit(): ?Unit

Activity::getKind()

public function getKind(): ActivityKind

Activity::getMessage()

public function getMessage(): string

Activity::getAmount()

public function getAmount(): ?int

Activity::getHappenedAt()

public function getHappenedAt(): \DateTimeImmutable

Application 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(): string

Application::getId()

public function getId(): ?int

Application::getUnit()

public function getUnit(): Unit

Application::setUnit()

public function setUnit(Unit $unit): self

Application::getOrganisation()

public function getOrganisation(): Organisation

Application::getFirstName()

public function getFirstName(): string

Application::setFirstName()

public function setFirstName(?string $firstName): self

Application::getLastName()

public function getLastName(): string

Application::setLastName()

public function setLastName(?string $lastName): self

Application::getName()

public function getName(): string

Application::getEmail()

public function getEmail(): string

Application::setEmail()

public function setEmail(?string $email): self

Application::getPhone()

public function getPhone(): ?string

Application::setPhone()

public function setPhone(?string $phone): self

Application::getOccupants()

public function getOccupants(): int

Application::setOccupants()

public function setOccupants(?int $occupants): self

Application::getMoveInOn()

public function getMoveInOn(): ?\DateTimeImmutable

Application::setMoveInOn()

public function setMoveInOn(?\DateTimeImmutable $moveInOn): self

Application::getOccupation()

public function getOccupation(): Occupation

Application::setOccupation()

public function setOccupation(Occupation $occupation): self

Application::getIncome()

public function getIncome(): int

Application::setIncome()

public function setIncome(?int $income): self

Application::getGuarantee()

public function getGuarantee(): Guarantee

Application::setGuarantee()

public function setGuarantee(Guarantee $guarantee): self

Application::getDossierUrl()

public function getDossierUrl(): ?string

Application::setDossierUrl()

public function setDossierUrl(?string $dossierUrl): self

Application::getMessage()

public function getMessage(): ?string

Application::setMessage()

public function setMessage(?string $message): self

Application::getStatus()

public function getStatus(): ApplicationStatus

Application::setStatus()

public function setStatus(ApplicationStatus $status): self

Application::getNotes()

public function getNotes(): ?string

Application::setNotes()

public function setNotes(?string $notes): self

Application::getVisitAt()

public function getVisitAt(): ?\DateTimeImmutable

Application::setVisitAt()

public function setVisitAt(?\DateTimeImmutable $visitAt): self

Application::getLease()

public function getLease(): ?Lease

Application::setLease()

public function setLease(?Lease $lease): self

Application::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

Application::getDecidedAt()

public function getDecidedAt(): ?\DateTimeImmutable

Application::getAsked()

public function getAsked(): int

The monthly rent the home asks, charges included, in cents.

Application::getIncomeRatio()

public function getIncomeRatio(): ?float

Income 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(): string

Associate::getId()

public function getId(): ?int

Associate::getOrganisation()

public function getOrganisation(): Organisation

Associate::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Associate::getUser()

public function getUser(): ?User

Associate::setUser()

public function setUser(?User $user): self

Associate::getFirstName()

public function getFirstName(): string

Associate::setFirstName()

public function setFirstName(string $firstName): self

Associate::getLastName()

public function getLastName(): string

Associate::setLastName()

public function setLastName(string $lastName): self

Associate::getName()

public function getName(): string

Associate::getEmail()

public function getEmail(): string

Associate::setEmail()

public function setEmail(string $email): self

Associate::getPhone()

public function getPhone(): ?string

Associate::setPhone()

public function setPhone(?string $phone): self

Associate::getShares()

public function getShares(): int

Associate::setShares()

public function setShares(?int $shares): self

Associate::getQuality()

public function getQuality(): AssociateQuality

Associate::setQuality()

public function setQuality(AssociateQuality $quality): self

Associate::getSince()

public function getSince(): ?\DateTimeImmutable

Associate::setSince()

public function setSince(?\DateTimeImmutable $since): self

Associate::isPublic()

public function isPublic(): bool

Associate::setPublic()

public function setPublic(bool $public): self

Associate::getBio()

public function getBio(): ?string

Associate::setBio()

public function setBio(?string $bio): self

Associate::getPortrait()

public function getPortrait(): ?string

Associate::getPortraitFile()

public function getPortraitFile()

Associate::setPortrait()

public function setPortrait($portrait): self

Building 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(): string

Building::getId()

public function getId(): ?int

Building::getOrganisation()

public function getOrganisation(): Organisation

Building::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Building::getName()

public function getName(): string

Building::setName()

public function setName(string $name): self

Building::getAddress()

public function getAddress(): string

Building::setAddress()

public function setAddress(string $address): self

Building::getPostcode()

public function getPostcode(): string

Building::setPostcode()

public function setPostcode(string $postcode): self

Building::getCity()

public function getCity(): string

Building::setCity()

public function setCity(string $city): self

Building::getBuiltIn()

public function getBuiltIn(): ?int

Building::setBuiltIn()

public function setBuiltIn(?int $builtIn): self

Building::getAccess()

public function getAccess(): ?string

Building::setAccess()

public function setAccess(?string $access): self

Contractor 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(): string

Contractor::getId()

public function getId(): ?int

Contractor::getOrganisation()

public function getOrganisation(): Organisation

Contractor::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Contractor::getUser()

public function getUser(): ?User

Contractor::setUser()

public function setUser(?User $user): self

Contractor::getCompany()

public function getCompany(): string

Contractor::setCompany()

public function setCompany(string $company): self

Contractor::getContactName()

public function getContactName(): ?string

Contractor::setContactName()

public function setContactName(?string $contactName): self

Contractor::getTrade()

public function getTrade(): string

Contractor::setTrade()

public function setTrade(string $trade): self

Contractor::getSiret()

public function getSiret(): ?string

Contractor::setSiret()

public function setSiret(?string $siret): self

Contractor::getEmail()

public function getEmail(): string

Contractor::setEmail()

public function setEmail(string $email): self

Contractor::getPhone()

public function getPhone(): ?string

Contractor::setPhone()

public function setPhone(?string $phone): self

Contractor::getIban()

public function getIban(): ?string

Contractor::setIban()

public function setIban(?string $iban): self

Deadline 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(): string

Deadline::getId()

public function getId(): ?int

Deadline::getOrganisation()

public function getOrganisation(): Organisation

Deadline::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Deadline::getTitle()

public function getTitle(): string

Deadline::setTitle()

public function setTitle(string $title): self

Deadline::getDueOn()

public function getDueOn(): \DateTimeImmutable

Deadline::setDueOn()

public function setDueOn(\DateTimeImmutable $dueOn): self

Deadline::isYearly()

public function isYearly(): bool

Deadline::setYearly()

public function setYearly(bool $yearly): self

Deadline::getNotes()

public function getNotes(): ?string

Deadline::setNotes()

public function setNotes(?string $notes): self

Deadline::next()

public function next(?\DateTimeImmutable $today = null): \DateTimeImmutable

Its 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(): string

Document::getId()

public function getId(): ?int

Document::getOrganisation()

public function getOrganisation(): Organisation

Document::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Document::getUnit()

public function getUnit(): ?Unit

Document::setUnit()

public function setUnit(?Unit $unit): self

Document::getLease()

public function getLease(): ?Lease

Document::setLease()

public function setLease(?Lease $lease): self

Document::getWorkOrder()

public function getWorkOrder(): ?WorkOrder

Document::setWorkOrder()

public function setWorkOrder(?WorkOrder $workOrder): self

Document::getKind()

public function getKind(): DocumentKind

Document::setKind()

public function setKind(DocumentKind $kind): self

Document::getTitle()

public function getTitle(): string

Document::setTitle()

public function setTitle(?string $title): self

Document::getFile()

public function getFile(): ?string

Document::setFile()

public function setFile($file): self

Document::isTenantVisible()

public function isTenantVisible(): bool

Document::setTenantVisible()

public function setTenantVisible(bool $tenantVisible): self

Document::getValidUntil()

public function getValidUntil(): ?\DateTimeImmutable

Document::setValidUntil()

public function setValidUntil(?\DateTimeImmutable $validUntil): self

Document::getUploadedBy()

public function getUploadedBy(): ?User

Document::getUploadedByName()

public function getUploadedByName(): ?string

Document::setUploadedBy()

public function setUploadedBy(?User $user, ?string $name = null): self

Document::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

Document::isImage()

public function isImage(): bool

Invitation 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(): string

Invitation::getId()

public function getId(): ?int

Invitation::getOrganisation()

public function getOrganisation(): Organisation

Invitation::getKind()

public function getKind(): InvitationKind

Invitation::getTargetId()

public function getTargetId(): int

Lease 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(): string

Lease::getId()

public function getId(): ?int

Lease::getUnit()

public function getUnit(): Unit

Lease::setUnit()

public function setUnit(Unit $unit): self

Lease::getOrganisation()

public function getOrganisation(): Organisation

Lease::getReference()

public function getReference(): string

Lease::setReference()

public function setReference(string $reference): self

Lease::getStartOn()

public function getStartOn(): \DateTimeImmutable

Lease::setStartOn()

public function setStartOn(\DateTimeImmutable $startOn): self

Lease::getEndOn()

public function getEndOn(): ?\DateTimeImmutable

Lease::setEndOn()

public function setEndOn(?\DateTimeImmutable $endOn): self

Lease::getRent()

public function getRent(): int

Lease::setRent()

public function setRent(?int $rent): self

Lease::getCharges()

public function getCharges(): int

Lease::setCharges()

public function setCharges(?int $charges): self

Lease::getMonthly()

public function getMonthly(): int

Lease::getDeposit()

public function getDeposit(): int

Lease::setDeposit()

public function setDeposit(?int $deposit): self

Lease::getDueDay()

public function getDueDay(): int

Lease::setDueDay()

public function setDueDay(?int $dueDay): self

Lease::getPaymentMethod()

public function getPaymentMethod(): PaymentMethod

Lease::setPaymentMethod()

public function setPaymentMethod(PaymentMethod $paymentMethod): self

Lease::getStatus()

public function getStatus(): LeaseStatus

Lease::setStatus()

public function setStatus(LeaseStatus $status): self

Lease::getNoticeOn()

public function getNoticeOn(): ?\DateTimeImmutable

Lease::setNoticeOn()

public function setNoticeOn(?\DateTimeImmutable $noticeOn): self

Lease::getIndexQuarter()

public function getIndexQuarter(): ?string

Lease::setIndexQuarter()

public function setIndexQuarter(?string $indexQuarter): self

Lease::getIndexValue()

public function getIndexValue(): ?string

Lease::setIndexValue()

public function setIndexValue(string|float|null $indexValue): self

Lease::getRevisedOn()

public function getRevisedOn(): ?\DateTimeImmutable

Lease::setRevisedOn()

public function setRevisedOn(?\DateTimeImmutable $revisedOn): self

Lease::getInsuranceUntil()

public function getInsuranceUntil(): ?\DateTimeImmutable

Lease::setInsuranceUntil()

public function setInsuranceUntil(?\DateTimeImmutable $insuranceUntil): self

Lease::getNotes()

public function getNotes(): ?string

Lease::setNotes()

public function setNotes(?string $notes): self

Lease::getParties()

public function getParties(): Collection

Lease::addParty()

public function addParty(LeaseParty $party): self

Lease::removeParty()

public function removeParty(LeaseParty $party): self

Lease::getTenants()

public function getTenants(): array
Returns

the tenants and co-tenants, not the guarantors

Lease::getTenantNames()

public function getTenantNames(): string

Lease::getRentCalls()

public function getRentCalls(): Collection

Lease::isRunningOn()

public function isRunningOn(\DateTimeImmutable $on): bool

LeaseParty 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(): string

LeaseParty::getId()

public function getId(): ?int

LeaseParty::getLease()

public function getLease(): ?Lease

LeaseParty::setLease()

public function setLease(?Lease $lease): self

LeaseParty::getUser()

public function getUser(): ?User

LeaseParty::setUser()

public function setUser(?User $user): self

LeaseParty::getRole()

public function getRole(): PartyRole

LeaseParty::setRole()

public function setRole(PartyRole $role): self

LeaseParty::getFirstName()

public function getFirstName(): string

LeaseParty::setFirstName()

public function setFirstName(string $firstName): self

LeaseParty::getLastName()

public function getLastName(): string

LeaseParty::setLastName()

public function setLastName(string $lastName): self

LeaseParty::getName()

public function getName(): string

LeaseParty::getEmail()

public function getEmail(): string

LeaseParty::setEmail()

public function setEmail(string $email): self

LeaseParty::getPhone()

public function getPhone(): ?string

LeaseParty::setPhone()

public function setPhone(?string $phone): self

LeaseParty::getIban()

public function getIban(): ?string

LeaseParty::setIban()

public function setIban(?string $iban): self

Member 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(): string

Member::getId()

public function getId(): ?int

Member::getOrganisation()

public function getOrganisation(): Organisation

Member::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Member::getUser()

public function getUser(): ?User

Member::setUser()

public function setUser(?User $user): self

Member::getName()

public function getName(): string

Member::setName()

public function setName(string $name): self

Member::getEmail()

public function getEmail(): string

Member::setEmail()

public function setEmail(string $email): self

Member::getTitle()

public function getTitle(): ?string

Member::setTitle()

public function setTitle(?string $title): self

Message 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(): ?int

Message::getLease()

public function getLease(): Lease

Message::getAuthor()

public function getAuthor(): ?User

Message::getAuthorName()

public function getAuthorName(): string

Message::isFromManagement()

public function isFromManagement(): bool

Message::getBody()

public function getBody(): string

Message::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

Message::getReadAt()

public function getReadAt(): ?\DateTimeImmutable

Message::markRead()

public function markRead(): self

Notice 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(): string

Notice::getId()

public function getId(): ?int

Notice::getOrganisation()

public function getOrganisation(): Organisation

Notice::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Notice::getBuilding()

public function getBuilding(): ?Building

Notice::setBuilding()

public function setBuilding(?Building $building): self

Notice::getTitle()

public function getTitle(): string

Notice::setTitle()

public function setTitle(string $title): self

Notice::getBody()

public function getBody(): string

Notice::setBody()

public function setBody(string $body): self

Notice::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

Notice::getSentAt()

public function getSentAt(): ?\DateTimeImmutable

Notice::setSentAt()

public function setSentAt(?\DateTimeImmutable $sentAt): self

Organisation 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(): string

Organisation::getId()

public function getId(): ?int

Organisation::getName()

public function getName(): string

Organisation::setName()

public function setName(string $name): self

Organisation::getSlug()

public function getSlug(): string

Organisation::setSlug()

public function setSlug(string $slug): self

Organisation::getLegalName()

public function getLegalName(): ?string

Organisation::setLegalName()

public function setLegalName(?string $legalName): self

Organisation::getVatNumber()

public function getVatNumber(): ?string

Organisation::setVatNumber()

public function setVatNumber(?string $vatNumber): self

Organisation::getRegistryCheckedAt()

public function getRegistryCheckedAt(): ?\DateTimeImmutable

Organisation::setRegistryCheckedAt()

public function setRegistryCheckedAt(?\DateTimeImmutable $registryCheckedAt): self

Organisation::getLegalForm()

public function getLegalForm(): ?string

Organisation::setLegalForm()

public function setLegalForm(?string $legalForm): self

Organisation::getSiren()

public function getSiren(): ?string

Organisation::setSiren()

public function setSiren(?string $siren): self

Organisation::getAddress()

public function getAddress(): ?string

Organisation::setAddress()

public function setAddress(?string $address): self

Organisation::getPostcode()

public function getPostcode(): ?string

Organisation::setPostcode()

public function setPostcode(?string $postcode): self

Organisation::getCity()

public function getCity(): ?string

Organisation::setCity()

public function setCity(?string $city): self

Organisation::getEmail()

public function getEmail(): ?string

Organisation::setEmail()

public function setEmail(?string $email): self

Organisation::getPhone()

public function getPhone(): ?string

Organisation::setPhone()

public function setPhone(?string $phone): self

Organisation::getIban()

public function getIban(): ?string

Organisation::setIban()

public function setIban(?string $iban): self

Organisation::getBookId()

public function getBookId(): ?int

Organisation::setBookId()

public function setBookId(?int $bookId): self

Organisation::getFoundedOn()

public function getFoundedOn(): ?\DateTimeImmutable

Organisation::setFoundedOn()

public function setFoundedOn(?\DateTimeImmutable $foundedOn): self

Organisation::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(): string

Payment::getId()

public function getId(): ?int

Payment::getRentCall()

public function getRentCall(): RentCall

Payment::getAmount()

public function getAmount(): int

Payment::getMethod()

public function getMethod(): PaymentMethod

Payment::getPaidOn()

public function getPaidOn(): \DateTimeImmutable

Payment::getReference()

public function getReference(): ?string

RentCall 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(): string

RentCall::getId()

public function getId(): ?int

RentCall::getLease()

public function getLease(): Lease

RentCall::getPeriod()

public function getPeriod(): \DateTimeImmutable

RentCall::getDueOn()

public function getDueOn(): \DateTimeImmutable

RentCall::setDueOn()

public function setDueOn(\DateTimeImmutable $dueOn): self

RentCall::getReference()

public function getReference(): string

RentCall::getRent()

public function getRent(): int

RentCall::setRent()

public function setRent(int $rent): self

RentCall::getCharges()

public function getCharges(): int

RentCall::setCharges()

public function setCharges(int $charges): self

RentCall::getTotal()

public function getTotal(): int

RentCall::getPaid()

public function getPaid(): int

RentCall::getRemaining()

public function getRemaining(): int

RentCall::getStatus()

public function getStatus(): RentStatus

RentCall::setStatus()

public function setStatus(RentStatus $status): self

RentCall::getCalledAt()

public function getCalledAt(): \DateTimeImmutable

RentCall::setCalledAt()

public function setCalledAt(\DateTimeImmutable $calledAt): self

RentCall::getPaidAt()

public function getPaidAt(): ?\DateTimeImmutable

RentCall::getRemindedAt()

public function getRemindedAt(): ?\DateTimeImmutable

RentCall::setRemindedAt()

public function setRemindedAt(?\DateTimeImmutable $remindedAt): self

RentCall::getReceiptNumber()

public function getReceiptNumber(): ?string

RentCall::setReceiptNumber()

public function setReceiptNumber(?string $receiptNumber): self

RentCall::getPayments()

public function getPayments(): Collection

RentCall::addPayment()

public function addPayment(Payment $payment): self

Settles it by a payment: partial, then paid once the total is reached.

RentCall::isPaid()

public function isPaid(): bool

RentCall::isLate()

public function isLate(?\DateTimeImmutable $today = null): bool

Unit 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(): string

Unit::getId()

public function getId(): ?int

Unit::getOrganisation()

public function getOrganisation(): Organisation

Unit::setOrganisation()

public function setOrganisation(Organisation $organisation): self

Unit::getBuilding()

public function getBuilding(): ?Building

Unit::setBuilding()

public function setBuilding(?Building $building): self

Unit::getKind()

public function getKind(): UnitKind

Unit::setKind()

public function setKind(UnitKind $kind): self

Unit::getName()

public function getName(): string

Unit::setName()

public function setName(string $name): self

Unit::getSlug()

public function getSlug(): string

Unit::setSlug()

public function setSlug(string $slug): self

Unit::getAddress()

public function getAddress(): ?string

Unit::setAddress()

public function setAddress(?string $address): self

Unit::getPostcode()

public function getPostcode(): ?string

Unit::setPostcode()

public function setPostcode(?string $postcode): self

Unit::getCity()

public function getCity(): ?string

Unit::setCity()

public function setCity(?string $city): self

Unit::getDistrict()

public function getDistrict(): ?string

Unit::setDistrict()

public function setDistrict(?string $district): self

Unit::getDoor()

public function getDoor(): ?string

Unit::setDoor()

public function setDoor(?string $door): self

Unit::getSurface()

public function getSurface(): ?float

Unit::setSurface()

public function setSurface(float|string|null $surface): self

Unit::getRooms()

public function getRooms(): ?int

Unit::setRooms()

public function setRooms(?int $rooms): self

Unit::getBedrooms()

public function getBedrooms(): ?int

Unit::setBedrooms()

public function setBedrooms(?int $bedrooms): self

Unit::getFloor()

public function getFloor(): ?int

Unit::setFloor()

public function setFloor(?int $floor): self

Unit::getHeating()

public function getHeating(): ?string

Unit::setHeating()

public function setHeating(?string $heating): self

Unit::getEnergyClass()

public function getEnergyClass(): ?string

Unit::setEnergyClass()

public function setEnergyClass(?string $energyClass): self

Unit::getEnergyValue()

public function getEnergyValue(): ?int

Unit::setEnergyValue()

public function setEnergyValue(?int $energyValue): self

Unit::getClimateClass()

public function getClimateClass(): ?string

Unit::setClimateClass()

public function setClimateClass(?string $climateClass): self

Unit::getDescription()

public function getDescription(): ?string

Unit::setDescription()

public function setDescription(?string $description): self

Unit::getFeatures()

public function getFeatures(): array

Unit::setFeatures()

public function setFeatures(array|string|null $features): self

Unit::getRent()

public function getRent(): int

Unit::setRent()

public function setRent(?int $rent): self

Unit::getCharges()

public function getCharges(): int

Unit::setCharges()

public function setCharges(?int $charges): self

Unit::getDeposit()

public function getDeposit(): int

Unit::setDeposit()

public function setDeposit(?int $deposit): self

Unit::isFurnished()

public function isFurnished(): bool

Unit::setFurnished()

public function setFurnished(bool $furnished): self

Unit::isPublished()

public function isPublished(): bool

Unit::setPublished()

public function setPublished(bool $published): self

Unit::getAvailableFrom()

public function getAvailableFrom(): ?\DateTimeImmutable

Unit::setAvailableFrom()

public function setAvailableFrom(?\DateTimeImmutable $availableFrom): self

Unit::getFacade()

public function getFacade(): string

Unit::setFacade()

public function setFacade(?string $facade): self

Unit::getPosition()

public function getPosition(): int

Unit::setPosition()

public function setPosition(?int $position): self

Unit::getPhotos()

public function getPhotos(): Collection

Unit::addPhoto()

public function addPhoto(UnitPhoto $photo): self

Unit::removePhoto()

public function removePhoto(UnitPhoto $photo): self

Unit::getCover()

public function getCover(): ?UnitPhoto

Unit::getLeases()

public function getLeases(): Collection

Unit::getCurrentLease()

public function getCurrentLease(?\DateTimeImmutable $on = null): ?Lease

The lease running today, if any.

Unit::isLet()

public function isLet(?\DateTimeImmutable $on = null): bool

Unit::isAvailable()

public function isAvailable(): bool

Free 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(): string

UnitPhoto::getId()

public function getId(): ?int

UnitPhoto::getUnit()

public function getUnit(): ?Unit

UnitPhoto::setUnit()

public function setUnit(?Unit $unit): self

UnitPhoto::getImage()

public function getImage(): ?string

UnitPhoto::getImageFile()

public function getImageFile()

UnitPhoto::setImage()

public function setImage($image): self

UnitPhoto::getCaption()

public function getCaption(): ?string

UnitPhoto::setCaption()

public function setCaption(?string $caption): self

UnitPhoto::getPosition()

public function getPosition(): int

UnitPhoto::setPosition()

public function setPosition(?int $position): self

WorkOrder 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(): string

WorkOrder::getId()

public function getId(): ?int

WorkOrder::getUnit()

public function getUnit(): Unit

WorkOrder::setUnit()

public function setUnit(Unit $unit): self

WorkOrder::getOrganisation()

public function getOrganisation(): Organisation

WorkOrder::getReportedBy()

public function getReportedBy(): ?User

WorkOrder::setReportedBy()

public function setReportedBy(?User $reportedBy): self

WorkOrder::getTitle()

public function getTitle(): string

WorkOrder::setTitle()

public function setTitle(string $title): self

WorkOrder::getDescription()

public function getDescription(): string

WorkOrder::setDescription()

public function setDescription(string $description): self

WorkOrder::getCategory()

public function getCategory(): string

WorkOrder::setCategory()

public function setCategory(string $category): self

WorkOrder::getUrgency()

public function getUrgency(): Urgency

WorkOrder::setUrgency()

public function setUrgency(Urgency $urgency): self

WorkOrder::getStatus()

public function getStatus(): WorkOrderStatus

WorkOrder::setStatus()

public function setStatus(WorkOrderStatus $status): self

WorkOrder::getContractor()

public function getContractor(): ?Contractor

WorkOrder::setContractor()

public function setContractor(?Contractor $contractor): self

WorkOrder::getVisitAt()

public function getVisitAt(): ?\DateTimeImmutable

WorkOrder::setVisitAt()

public function setVisitAt(?\DateTimeImmutable $visitAt): self

WorkOrder::getQuoteAmount()

public function getQuoteAmount(): ?int

WorkOrder::setQuoteAmount()

public function setQuoteAmount(?int $quoteAmount): self

WorkOrder::getInvoiceAmount()

public function getInvoiceAmount(): ?int

WorkOrder::setInvoiceAmount()

public function setInvoiceAmount(?int $invoiceAmount): self

WorkOrder::getInvoiceNumber()

public function getInvoiceNumber(): ?string

WorkOrder::setInvoiceNumber()

public function setInvoiceNumber(?string $invoiceNumber): self

WorkOrder::getReport()

public function getReport(): ?string

WorkOrder::setReport()

public function setReport(?string $report): self

WorkOrder::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

WorkOrder::setCreatedAt()

public function setCreatedAt(\DateTimeImmutable $createdAt): self

WorkOrder::getClosedAt()

public function getClosedAt(): ?\DateTimeImmutable

WorkOrder::setClosedAt()

public function setClosedAt(?\DateTimeImmutable $closedAt): self

WorkOrder::getEvents()

public function getEvents(): Collection

WorkOrder::addEvent()

public function addEvent(WorkOrderEvent $event): self

WorkOrderEvent 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(): ?int

WorkOrderEvent::getWorkOrder()

public function getWorkOrder(): ?WorkOrder

WorkOrderEvent::setWorkOrder()

public function setWorkOrder(?WorkOrder $workOrder): self

WorkOrderEvent::getAuthor()

public function getAuthor(): ?User

WorkOrderEvent::getAuthorName()

public function getAuthorName(): string

WorkOrderEvent::getBody()

public function getBody(): string

WorkOrderEvent::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

WorkOrderEvent::setCreatedAt()

public function setCreatedAt(\DateTimeImmutable $createdAt): self

Base\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(): string

ApplicationStatus 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(): bool

AssociateQuality 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(): string

DocumentKind::work()

public static function work(): array

The 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(): bool

Paid 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(): bool

UnitKind 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(): bool

Base\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): void

ApplicationType::getBlockPrefix()

public function getBlockPrefix(): string

ApplicationType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

ContractorUpdateType 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): void

ContractorUpdateType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

InsuranceType 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): void

InsuranceType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

InvitationAcceptType 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): void

InvitationAcceptType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

MessageType 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): void

MessageType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

ReportType 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): void

ReportType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

VisitRequestType 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): void

VisitRequestType::getBlockPrefix()

public function getBlockPrefix(): string

VisitRequestType::configureOptions()

public function configureOptions(\Symfony\Component\OptionsResolver\OptionsResolver $resolver): void

WorkFileType 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): void

WorkFileType::configureOptions()

public function configureOptions(OptionsResolver $resolver): void

Base\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): bool

AssociateBookAccess::canManage()

public function canManage(UserInterface $user, Book $book): bool

BankSettlement 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): void

CompanyAccounts 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): ?array

Base\Estate\Model

ApplicationRequest class

final class ApplicationRequest ApplicationRequest.php:12

What the application form asks (ApplicationType), before it becomes an Application.

public ?string $firstName = null
public ?string $lastName = null
public ?string $email = null
public ?string $phone = null
public ?int $occupants = 1
public ?\DateTimeImmutable $moveInOn = null
public ?Occupation $occupation = Occupation::PERMANENT
public ?int $income = null

Net monthly income of the household, in cents.

public ?Guarantee $guarantee = Guarantee::NONE
public ?string $dossierUrl = null
public ?string $message = null

ApplicationRequest::toApplication()

public function toApplication(Unit $unit): Application

Base\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): int

New 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): array

What a lease's tenants see: the lease's documents and its home's, those shared with them.

DocumentRepository::forWorkOrder()

public function forWorkOrder(WorkOrder $order): array

LeaseRepository 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): array

The 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): int

Tenant 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): ?string

UnitRepository 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): array

WorkOrderRepository class

class WorkOrderRepository extends ServiceEntityRepository WorkOrderRepository.php:13

WorkOrderRepository::__construct()

public function __construct(ManagerRegistry $registry)

WorkOrderRepository::findOpen()

public function findOpen(Organisation $organisation): array

WorkOrderRepository::findForContractors()

public function findForContractors(array $contractors): array
$contractors

@return list<WorkOrder>

WorkOrderRepository::spent()

public function spent(Organisation $organisation, \DateTimeImmutable $from, \DateTimeImmutable $to): int

Spent 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): Activity

Applications 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): Application

Applications::shortlist()

public function shortlist(Application $application): void

Applications::inviteToVisit()

public function inviteToVisit(Application $application, \DateTimeImmutable $at, ?string $message = null): void

The applicant invited to visit at $at, with the management's words.

Applications::decline()

public function decline(Application $application, ?string $message = null, bool $notify = true): void

Declined, 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): Lease

Accepted: 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): int

Applications 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): ?Book

Books::rentCalled()

public function rentCalled(RentCall $call): void

Books::paymentReceived()

public function paymentReceived(Payment $payment): void

Books::workInvoiced()

public function workInvoiced(WorkOrder $order): void

CompanyRecords 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): bool

Fills 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): Document

A 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): Document

A 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 = []): void

Figures 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): array

Invitations 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): ?Invitation

Invitations::target()

public function target(Invitation $invitation): Associate|LeaseParty|Contractor|Member|null

Invitations::accept()

public function accept(Invitation $invitation, User $user): void

The 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): Message

Messages::read()

public function read(Lease $lease, bool $byManagement): array

The 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(): bool

OnlinePayments::methods()

public function methods(): array

OnlinePayments::start()

public function start(RentCall $call, string $method, string $returnUrl, string $cancelUrl, ?string $email = null): string

Where to send the tenant: the provider's page.

OnlinePayments::complete()

public function complete(RentCall $call, string $reference): bool

Back 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
$post

false when the books have it already (a bank line reconciled against the rent call)

Payments::method()

public function method(PaymentMethod $method): string

Receipts 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): string

Receipts::html()

public function html(RentCall $call, string $kind = 'receipt'): string

Receipts::pdf()

public function pdf(RentCall $call, string $kind = 'receipt'): ?string

The PDF's bytes, or null without dompdf.

Receipts::attestationHtml()

public function attestationHtml(Lease $lease, \DateTimeImmutable $on): string

The 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): ?string

RentCalls 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): ?RentCall

RentCalls::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): string

RentRevisions 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): \DateTimeImmutable

The 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): int

The rent (cents, charges aside) at the new index.

RentRevisions::apply()

public function apply(Lease $lease, string $newQuarter, string $newIndex, \DateTimeImmutable $on, ?User $by = null): int

The 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): array

The 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): bool

Spaces::reset()

public function reset(): void

Forgotten between requests (a worker, the tests): who someone is may change.

Spaces::associateships()

public function associateships(?User $user): array

Spaces::isAssociateOf()

public function isAssociateOf(?User $user, Organisation $organisation): bool

Spaces::tenancies()

public function tenancies(?User $user): array

Spaces::isPartyOf()

public function isPartyOf(?User $user, Lease $lease): bool

Spaces::contractorships()

public function contractorships(?User $user): array

Spaces::of()

public function of(?User $user): array

The 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): WorkOrder

WorkOrders::assign()

public function assign(WorkOrder $order, Contractor $contractor, ?\DateTimeImmutable $visitAt, ?User $by, string $byName = 'Gestion', ?string $note = null): void

WorkOrders::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): void

What 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): void

WorkOrders::close()

public function close(WorkOrder $order, ?User $by, string $byName = 'Gestion'): void

Closed 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(): array

EstateExtension::onlinePayment()

public function onlinePayment(): bool

EstateExtension::euros()

public function euros(?int $cents, bool $round = false): string

123456 → "1 234,56 €" (cents in); round drops the cents.