This shows you the differences between two versions of the page.
poo-ca-cd:teme:2024:proiect-etapa2 [2025/01/08 19:23] ioana.tudorache2507 [Business Account] |
poo-ca-cd:teme:2024:proiect-etapa2 [2025/01/20 13:27] (current) ioana.tudorache2507 [Proiect Etapa 2 - J. POO Morgan Chase & Co.] |
||
---|---|---|---|
Line 6: | Line 6: | ||
* Consultant & Revisor: [[stefancocioran@gmail.com | Stefan Cocioran ]] | * Consultant & Revisor: [[stefancocioran@gmail.com | Stefan Cocioran ]] | ||
* Data publicării: 17 decembrie, ora 10:34 | * Data publicării: 17 decembrie, ora 10:34 | ||
- | * Deadline HARD: 15 ianuarie, ora 23:59 | + | * Deadline HARD: 21 ianuarie, ora 10:00 dimineața |
* Ultimele modificări: | * Ultimele modificări: | ||
* Publicare schelet - 20 Dec. 2024 | * Publicare schelet - 20 Dec. 2024 | ||
Line 13: | Line 13: | ||
* Actualizat teste și enunț - 02 Ian. 2025 | * Actualizat teste și enunț - 02 Ian. 2025 | ||
* Actualizat teste - 05 Ian. 2025 | * Actualizat teste - 05 Ian. 2025 | ||
+ | * Actualizat enunț și ref-uri pentru t14 si t18-20 pentru cazul unui asociat cu 2 roluri - 11 Ian. 2025 | ||
+ | * Actualizat DEADLINE HARD - 11 Ian. 2025 | ||
+ | * Publicare soluție oficială pentru etapa 1 în secțiunea resurse - 14 Ian. 2025 | ||
Line 20: | Line 23: | ||
**Este obligatoriu să folosiți cel puțin 4 design pattern-uri.** Trebuie sa precizati in README ce design pattern ati folosit, si motivatia & locatia unde a fost folosita</note> | **Este obligatoriu să folosiți cel puțin 4 design pattern-uri.** Trebuie sa precizati in README ce design pattern ati folosit, si motivatia & locatia unde a fost folosita</note> | ||
- | <note important>**Depunctari lipsa design pattern-uri**: Pentru fiecare design pattern lipsa (din cele 4), veti avea o depunctare de -2.5p, astfel pentru: | + | <note important>**Depunctari lipsa design pattern-uri**: Pentru fiecare design pattern lipsa (din cele 4), veti avea o depunctare de -2.5p din 10p (maxim cat se poate obtine pe tema fara bonusuri), astfel pentru: |
- | * 0 design pattern-uri - -10p | + | * 0 design pattern-uri - -10p / 10p |
- | * 1 design pattern-uri - -7.5p | + | * 1 design pattern-uri - -7.5p / 10p |
- | * 2 design pattern-uri - -5p | + | * 2 design pattern-uri - -5p / 10p |
- | * 3 design pattern-uri - -2.5p | + | * 3 design pattern-uri - -2.5p / 10p |
</note> | </note> | ||
Line 159: | Line 162: | ||
Fiecare comerciant vrea să atragă cât mai mulți clienți, așa că introduce strategia de cashback. Cu cât cheltui mai mult, cu atât câștigi mai mult înapoi 🤑. | Fiecare comerciant vrea să atragă cât mai mulți clienți, așa că introduce strategia de cashback. Cu cât cheltui mai mult, cu atât câștigi mai mult înapoi 🤑. | ||
+ | |||
+ | |||
+ | <note important>**Cashback-ul este calculat SEPARAT PER FIECARE CONT al utilizatorului** - fiecare cont va avea o //lista cu discounturile// primite de la comerciantii de tip //nrOfTransactions (Food, Clothes, Tech)// si o //suma totala de cheltuieli// pentru comerciantii de tip //spendingThreshold//.</note> | ||
Un comerciant poate să aleagă unul din următoarele planuri de cashback: | Un comerciant poate să aleagă unul din următoarele planuri de cashback: | ||
Line 171: | Line 177: | ||
<note important>Cashback-ul pentru categoriile de Food, Clothes si Tech poate fi folosit **pentru ORICE tip de comerciant** - spendingThreshold sau nrOfTransactions - atata timp cat** face parte din una din categoriile mentionate**.</note> | <note important>Cashback-ul pentru categoriile de Food, Clothes si Tech poate fi folosit **pentru ORICE tip de comerciant** - spendingThreshold sau nrOfTransactions - atata timp cat** face parte din una din categoriile mentionate**.</note> | ||
+ | |||
+ | <note>Exemplu suplimentar pentru un utilizator ce are 2 conturi - cont1 si cont2\\ | ||
+ | |||
+ | card1, cont1 - discounts = {Food}\\ | ||
+ | card2, cont2 - discounts = {Food, Clothes}\\ | ||
+ | |||
+ | se face plata la KFC cu card1 -> se face discount \\ | ||
+ | se face plata la KFC cu card1 -> NU se face discount pt ca nu mai am niciun fel de discount\\ | ||
+ | se face plata la Zara cu card2 -> se face discount \\ | ||
+ | se face plata la KFC cu card2 -> se face discount \\ | ||
+ | se face plata la KFC cu card2 -> NU se face discount pt ca nu mai am niciun fel de discount</note> | ||
Se contorizează numărul de tranzacții de la fiecare comerciant de acest tip în ordinea în care se primesc comenzile de plată cu cardul sau transfer bancar. În momentul în care se atinge unul dintre pragurile pentru numărul de tranzacții, atunci se va primi cashbackul aferent. | Se contorizează numărul de tranzacții de la fiecare comerciant de acest tip în ordinea în care se primesc comenzile de plată cu cardul sau transfer bancar. În momentul în care se atinge unul dintre pragurile pentru numărul de tranzacții, atunci se va primi cashbackul aferent. | ||
Line 198: | Line 215: | ||
Cashback-ul se va primi la tranzacția curentă pentru care s-a îndeplinit unul din pragurile precizate anterior. | Cashback-ul se va primi la tranzacția curentă pentru care s-a îndeplinit unul din pragurile precizate anterior. | ||
\\ | \\ | ||
+ | |||
+ | <note>Exemplu suplimentar pentru un utilizator ce are 2 conturi - acc1 si acc2 \\ | ||
+ | \\ | ||
+ | card1, acc1 -> total1\\ | ||
+ | card2, acc2 -> total2\\ | ||
+ | \\ | ||
+ | se face plata cu card1 -> total1 + amount\\ | ||
+ | se face plata cu card2 -> total2 + amount\\ | ||
+ | </note> | ||
<note important>Se aplica cashback de fiecare dată când se îndeplinește una din condiții.</note> | <note important>Se aplica cashback de fiecare dată când se îndeplinește una din condiții.</note> | ||
Line 209: | Line 235: | ||
<note important>Tipurile de tranzacții pentru care se aplica cashback sunt **plățile online** și **transferurile bancare către comercianți**.</note> | <note important>Tipurile de tranzacții pentru care se aplica cashback sunt **plățile online** și **transferurile bancare către comercianți**.</note> | ||
- | |||
- | <note important>**Cashback-ul este calculat SEPARAT PER FIECARE CONT al utilizatorului** - fiecare cont va avea o //lista cu discounturile// primite de la comerciantii de tip //nrOfTransactions (Food, Clothes, Tech)// si o //suma totala de cheltuieli// pentru comerciantii de tip //spendingThreshold//.</note> | ||
<note important>**Toate tranzacțiile în orice currency vor fi luate în considerare pentru cashback** și suma totală va fi convertită in RON. | <note important>**Toate tranzacțiile în orice currency vor fi luate în considerare pentru cashback** și suma totală va fi convertită in RON. | ||
Line 389: | Line 413: | ||
* **employee** | * **employee** | ||
* poate să efectueze plăți - plăți cu cardul sau transfer bancar - în limita la 500RON inițial | * poate să efectueze plăți - plăți cu cardul sau transfer bancar - în limita la 500RON inițial | ||
+ | * poate să depună bani în contul de business în limita la 500RON inițial | ||
* poate să creeze carduri și să le șteargă doar pe cele create de el | * poate să creeze carduri și să le șteargă doar pe cele create de el | ||
* poate sa faca plati cu orice fel de card | * poate sa faca plati cu orice fel de card | ||
Line 424: | Line 449: | ||
- | <note important>**Numai ownerul** poate schimba limita pentru plăți și depus bani, să adauge noi asociați, să seteze balanța minimă și să șteargă contul.</note> | + | <note important>**Numai ownerul** poate schimba limita pentru plăți și depus bani, să adauge noi asociați, să seteze balanța minimă și să șteargă contul. |
+ | </note> | ||
+ | |||
+ | <note important>Un asociat **NU poate avea 2 roluri**, poate fi doar employee sau manager. Se va lua rolul cand a fost prima data adaugat.\\ | ||
+ | |||
+ | Acest lucru este valabil si pentru owner-ul contului de business - nu poate avea rol de manager sau employee.</note> | ||
Line 470: | Line 500: | ||
Mesaje posibile pentru această comandă: | Mesaje posibile pentru această comandă: | ||
- | * "You are not authorized to make this transaction.” | + | * "You are not authorized to make this transaction." |
+ | * "The user is already an associate of the account." | ||
+ | * "User not found" | ||
\\ | \\ | ||
Line 485: | Line 517: | ||
* **createCard / createOneTimeCard** | * **createCard / createOneTimeCard** | ||
* se primeste si email-ul utlizatorului care il creeaza pentru a putea tine evidenta cardurilor pentru contul business | * se primeste si email-ul utlizatorului care il creeaza pentru a putea tine evidenta cardurilor pentru contul business | ||
+ | * se poate crea un card catre owner sau oricare asociat | ||
* **deleteAccount** | * **deleteAccount** | ||
* numai ownerul contului de business va putea face asta | * numai ownerul contului de business va putea face asta | ||
* **deleteCard** | * **deleteCard** | ||
* un employee poate șterge doar cardurile create de el, un manager și ownerul pot șterge orice card | * un employee poate șterge doar cardurile create de el, un manager și ownerul pot șterge orice card | ||
- | * **setMinBalance** | ||
- | * numai ownerul contului de business va putea face asta | ||
* **payOnline** | * **payOnline** | ||
* se poate primi si un comerciant invalid | * se poate primi si un comerciant invalid | ||
Line 498: | Line 529: | ||
* doar se deduce suma aferenta din comanda din contul dat ca parametru, incluzand comision daca se aplica | * doar se deduce suma aferenta din comanda din contul dat ca parametru, incluzand comision daca se aplica | ||
* se considera ca suma data ca parametru este in currency-ul contului din care se retrage suma | * se considera ca suma data ca parametru este in currency-ul contului din care se retrage suma | ||
- | * **setAlias** | + | |
- | * pentru contul de business, vom putea seta un alias pentru comercianți pentru a face plata mai rapid către ei | + | <note important>**Luati in considerare si toate corner case-urile de la etapa 1** .\\ |
+ | |||
+ | De exemplu, un card nu poate fi sters daca inca exista bani in contul asociat acestuia sau un one-time card va fi sters si regenerat dupa orice utilizare - asta include si operatiile noi de la etapa 2 precum cashWithdrawal.</note> | ||
+ | |||
+ | <note important>Mesajul de eroare //"User not found"// va fi aplicat pentru urmatoarele comenzi noi de la aceasta etapa (pe langa cele existente de la etapa 1): | ||
+ | * sendMoney - indiferent daca destinatarul este un utilizator sau comerciant | ||
+ | * acceptSplitPayment | ||
+ | * rejectSplitPayment | ||
+ | * addNewBusinessAssociate | ||
+ | * changeSpendingLimit | ||
+ | * changeDepositLimit | ||
+ | * cashWithdrawal | ||
+ | </note> | ||
+ | |||
+ | <note important>Pentru un cont de tip business, se presupune ca owner-ul seteaza functionalitatile asociate comenzilor de addNewBusinessAssociate, setMinBalance si upgradePlan.</note> | ||
=== Input === | === Input === | ||
Line 645: | Line 690: | ||
* "Account **${accounts[current_index]}** has insufficient funds for a split payment." -> //se ia primul cont găsit că are fonduri insuficiente pentru plata distribuită// | * "Account **${accounts[current_index]}** has insufficient funds for a split payment." -> //se ia primul cont găsit că are fonduri insuficiente pentru plata distribuită// | ||
* "One user rejected the payment." -> //cand unul din utilizatori a dat reject la plata// | * "One user rejected the payment." -> //cand unul din utilizatori a dat reject la plata// | ||
+ | * "User not found" | ||
\\ | \\ | ||
Line 886: | Line 932: | ||
===== Resurse și linkuri utile ===== | ===== Resurse și linkuri utile ===== | ||
- | * [[https://github.com/oop-pub/oop-asignments/tree/master/teme/J-POO-Morgan-Proiect-2|Schelet de cod]] | + | * [[https://github.com/oop-pub/oop-asignments/tree/master/teme/J-POO-Morgan-Proiect-1/skel|Schelet de cod]] |
+ | * [[https://github.com/oop-pub/oop-asignments/tree/master/teme/J-POO-Morgan-Proiect-1/solution|Soluție oficială etapa 1]] | ||
* [[https://curs.upb.ro/2024/mod/forum/view.php?id=86305|Forum]] | * [[https://curs.upb.ro/2024/mod/forum/view.php?id=86305|Forum]] | ||
* [[https://curs.upb.ro/2024/mod/assign/view.php?id=69287|Vmchecker Next]] | * [[https://curs.upb.ro/2024/mod/assign/view.php?id=69287|Vmchecker Next]] |