# Budget OPTION 1 ## Vue d'ensemble ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } class BudgetLine #lightgreen{ } class FinancingSource #lightgreen { } class Cost #lightgreen{ } class Session { } class Financing #lightgreen { } class Plan { } Plan -l- BudgetLine Plan -l- Session Cost -u- Session Registration -r- Session Registration -- Cost FinancingSource - BudgetLine Financing -u- BudgetLine Financing -- Session @enduml ``` ## MCD ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } class BudgetLine #lightgreen{ Id : int IDENTITY<1,1> NOT NULL ~~PlanId~~ : int NOT NULL ~~FinancingSourceId~~ : int NOT NULL Type : nvarchar<Subsidy | External | OwnFound > NOT NULL AmountExcludingTaxes : decimal Currency : nvarchar<3> CreatedAt : [datetimeoffset]<7> NULL CreatedBy : int NOT NULL } class FinancingSource #lightgreen { Id : int IDENTITY<1,1> NOT NULL, Type : nvarchar<Subsidy | External | OwnFound> NOT NULL Name : nvarchar<255> NOT NULL Description : nvarchar<600> NOT NULL CreatedAt : [datetimeoffset]<7> NULL CreatedBy : int NOT NULL } class SessionCost #lightgreen{ Id : int IDENTITY<1,1> NOT NULL ~~SessionId~~ : int NOT NULL AmountExcludingTaxes : decimal DEFAULT 0 Currency : nvarchar<3> Comment : nvarchar<250> CreatedAt : [datetimeoffset]<7> NULL CreatedBy : int NOT NULL DeletedAt : [datetimeoffset]<7> NULL DeletedBy : int NULL } class RegistrationCost #lightgreen{ Id : int IDENTITY<1,1> NOT NULL ~~RegistrationId~~ : int AmountExcludingTaxes : decimal DEFAULT 0 Currency : nvarchar<3> Comment : nvarchar<250> CreatedAt : [datetimeoffset]<7> NULL CreatedBy : int NOT NULL DeletedAt : [datetimeoffset]<7> NULL DeletedBy : int NULL } class Session { ... OwnFinancingAmount: decimal OwnFinancingCurrency : nvarchar<3> } class Financing #lightgreen { Id : IDENTITY<1,1> NOT NULL ~~BudgetId~~ : int NOT NULL ~~SessionId~~ : int NOT NULL AmountExcludingTaxes : decimal NOT NULL DEFAULT 0 Currency : nvarchar<3> NOT NULL CreatedAt : [datetimeoffset]<7> NULL CreatedBy : int NOT NULL } class Plan { ... TargetTrainingHours: int NOT NULL DEFAULT 0 TargetCostPerHour: decimal NOT NULL DEFAULT 0 OwnBudget : decimal NOT NULL DEFAULT 0 } Plan -l- BudgetLine Plan -l- Session SessionCost -u- Session Registration -r- Session Registration -- RegistrationCost FinancingSource - BudgetLine Financing -u- BudgetLine Financing -- Session @enduml ``` ## API - Ressources ### Budget #### Création Pour chaque source de financement, à la création d'un plan, on va créer une ligne budgetaire. Impossible de créer à la main un budget. #### Edition ```javascript PUT /talent-training/api/budgets { items: [ { id : 7, amount : 20000 } ] } ``` ##### Regles - La currency n'est pas possible de l'editer car elle est deduite du plan #### Lecture ```javascript GET /talent-training/api/budgets/42 query Parameters : planId, financingSourceId return { 'id' : 42, 'type' : "external" , 'source' : { 'id' : 0, 'name' : "Externe 1", 'description' : "lorem ipsum", }, 'planId' : 7, 'currency' : 'EUR', 'amount' : 7.00, } ``` ## Cost ### Création La création des couts se fait à la création d’une registration ou d’une session ### Edition La currency n'est pas possible de l'editer car elle est deduite du plan ```javascript PUT /talent-training/api/costs/:id { 'amount' : 2000 } PUT /talent-training/api/costs [ { 'id' : 7, 'amount' : 2000, 'comment' : 'lorem ipsum...' } ... ] ``` ### Lecture ```javascript GET /talent-training/api/costs/id return { 'id' : 7, 'sessionId' : 42, 'registrationId' : null, 'amount' : 300, 'currency' : 'EU', 'comment' : 'lorem ipsum...' } GET /talent-training/api/costs Query Parameters : sessionId, registrationId ``` ## Financing Source ### Création Pour l'MVP nous avons en dur dans la base un `financing-source` de type : - `subsidy` pour le subventions - `external` pour les fonds externes ### Edition Pour l'MVP l'édition n'est pas prévu ### Lecture ```javascript GET /talent-training/api/financing-sources return { items : [ { 'id' : 0, 'name' : 'External 1', 'type' : 'External', 'description' : 'lorem ipsum...' }, { 'id' : 1, 'name' : 'Subsidy 1', 'type' : 'Subsidy', 'description' : 'lorem ipsum ...' }, { 'id' : 2, 'name' : 'fond propres', 'type' : 'Own', 'description' : 'lorem ipsum ...' } ] } ``` ## Financing ### Création Pour tout les budgets du plan, à la création d'une session, on créé les financing associés. ### Edition ```javascript PUT /talent-training/api/financings [ { 'id' : 7, 'amount' : 1000 } ] PUT /talent-training/api/financings/7 { 'amount' : 1000 } ``` #### Regles - La currency n'est pas possible de l'editer car elle est deduite du plan ### Lecture ```javascript GET /talent-training/api/financings/id GET /talent-training/api/financings queryParameters : budgetId, budget.type, sessionId { items : [ { 'id' : 7, 'amount' : 1000, 'courrency' :'EUR', 'budget' : { id : 42, type : 'External', } 'sessionId' : 1 }, ... ] } ``` ## Creation du budget ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } actor AdminRH AdminRH -> Plan : Create Plan -> FinancingSource : GetAll Plan -> BudgetLine : Pour chaque source de financement, création d'un budget @enduml ``` ## Creation des couts ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } actor AdminRH AdminRH -> Session : Change status : opened Session -> Cost : IF not exist, Create fixed cost for the session @enduml ``` ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } actor AdminRH AdminRH -> Registration : Create Registration -> Cost : Create @enduml ``` ## Création des financings ```plantuml @startuml hide circle skinparam class { BackgroundColor White BorderColor Black ArrowColor Black } actor AdminRH AdminRH -> Session : Create Session -> Budget : Get All Plan budget Session -> Financing : Foreach budget, create a Financing @enduml ``` # ```plantuml @startuml node UpdateOwnBudget as "Update own budget" interface AnyBudgetUpdated as "Event : Any budget updated" interface TargetHoursUpdated as "Event : Target hours updated" interface TargetCostPerHoursUpdated as "Event : Target avg cost per hours updated" UpdateOwnBudget <-- AnyBudgetUpdated UpdateOwnBudget <-- TargetHoursUpdated UpdateOwnBudget <-- TargetCostPerHoursUpdated @enduml ``` # ```plantuml @startuml node UpdateOwnFinancing as "Update own financing" interface AnyBudgetUpdated as "Event : Any cost updated" interface TargetHoursUpdated as "Event : Any financing updated" interface TargetCostPerHoursUpdated as "Event : Session place available updated" interface Registered as "Event : employee registered to a session" UpdateOwnFinancing <-- AnyBudgetUpdated UpdateOwnFinancing <-- TargetHoursUpdated UpdateOwnFinancing <-- TargetCostPerHoursUpdated UpdateOwnFinancing <-- Registered @enduml ```