Skip to content
/ ChocoFactory Public template

CSharp Teamproject : CHOCOFACTORY

License

Notifications You must be signed in to change notification settings

zafeirisdimi/ChocoFactory

Repository files navigation


Logo


🏭CHOCOFACTORY

Description(GR)

  1. Αρχικά η επιχείρηση θα έχει 1 Εργοστάσιο με δυνατότητα επέκτασης
  2. Επίσης θα έχει και 1 κατάστημα πώλησης των προϊόντων με δυνατότητα επέκτασης
  3. Το εργοστάσιο θα παράγει διάφορα είδη σοκολάτας
  4. Το εργοστάσιο θα προμηθεύεται την πρώτη ύλη κάθε χρόνο με συμβόλαιο από συγκεκριμένο προμηθευτή. Σε Περίπτωση που η πρώτη ύλη πέσει στο 10 % τότε θα γίνεται νέα συμπληρωματική παραγγελία από τον ίδιο Προμηθευτή.
  5. Θα δεχόμαστε 3 προσφορές από Προμηθευτές οι οποίες θα αφορούν ποσότητα, τιμή ανά κιλό, ποιότητα (δείκτης όσο μεγαλύτερη η ποιότητα τόσο μεγαλύτερη η τιμή)
  6. Η επιχείρηση θα διαθέτει εργαζόμενους στο εργοστάσιο και στο κατάστημα πώλησης (Ignore for now)
  7. Τα είδη σοκολάτας που θα παράγει θα είναι λευκή, μαύρη, γάλακτος. Η γάλακτος χωρίζεται σε επιπλέον κατηγορίες: σκέτη, αμυγδάλου, φουντούκι. Κάθε είδος θα έχει διαφορετική τιμή πώλησης. Το κύριο προϊόν παραγωγής θα είναι η μαύρη σοκολάτα.
  8. Βασικός στόχος της πρώτης έκδοσης του ΣΥΣΤΗΜΑΤΟΣ είναι να μπορεί να επιλέξει προμηθευτή, να παράγει σοκολάτες και να πουλάει από το κατάστημα.
  9. Το κατάστημα που θα πουλάει τις σοκολάτες έχει πολιτική έκπτωσης κάθε δεύτερη Τρίτη του μήνα να εφαρμόζει 20 % έκπτωση στα προϊόντα του.
  10. Η πρώτη ύλη από τους προμηθευτές θα παραλαμβάνεται σε κιλά. Στο τέλος του έτους ότι περισσέψει (εάν περισσέψει) θα αφοσιώνεται σε πειραματισμό για νέα προϊόντα.
  11. Τα Προϊόντα που θα παράγονται για πειραματισμό θα δίνονται ως δώρο σε πελάτες που υλοποιούν αγορές πάνω από 30 ευρώ(1 προϊόν ανά 30 ευρώ).
  12. Εάν τα κέρδη της επιχείρησης στο τέλος του χρόνου φτάσουν σε ένα συγκεκριμένο ποσοστό θα δημιουργείται αυτόματα νέο κατάστημα πώλησης προϊόντων. Το ποσοστό θα καθορίζεται από τον πρόεδρο της εταιρίας.
  13. Η Παραγωγή θα είναι ημερήσια σταθερή 500 σοκολάτες. Το 50 % της σοκολάτας που θα παράγεται αρχικά θα πηγαίνει απευθείας στο κατάστημα. Το υπόλοιπο θα παραμένει σε αποθήκη που ανήκει στο εργοστάσιο. Όταν το ποσοστό στο κατάστημα πέφτει στο 25% τότε θα ανεφοδιάζεται πάλι από την αποθήκη στο τέλος της κάθε μέρας ώστε να έχει πάντα το 50% της παραγωγής.
  14. Κάθε νέο κατάστημα πώλησης θα διαθέτει τοποθεσία, δικούς του υπαλλήλους και θα μπορεί να αποδίδει ξεχωριστά τα κέρδη του προς την επιχείρηση.
  15. Στο τέλος κάθε ημέρας το κάθε κατάστημα θα αποδίδει αναφορά πόσο προϊόντα πουλήθηκαν από κάθε είδος καθώς και το υπόλοιπό τους.

📋Table of contents

factorydiagram

/Domain/

IDeparment

Type Properties Methods
int DepartmentID get
string Description get

ICompany

Type Properties Methods
decimal Capital get
decimal Revenue get, set
Extra Methods Description
DailyActions(DateTime currentDate) Set the daily Action of Company
YearlyActions() Set the yearly Action of Company

IFactory

Type Properties Methods
int ID get
string City get
string Address get
double TotalProducts get
double TotalEmployees get

🏢Company

Type Properties Methods
decimal Capital get; private set;
decimal Revenue get; set;
List of Factory Employees get; set;
List of Shop Shops get; set;
List of Employee Employees get; set;
CompanyPolicy CompanyPolicy get; set;
bool RevenueGoalAchieved get; set;
Extra Methods Description
DailyActions(DateTime currentDate) Set the daily Action of Company
YearlyActions() Set the yearly Action of Company

🧮Accounting

Type Properties Methods
int DepartmentID get; set;
Factory Factory get; set;
List of Employee Employees get; set;
List of Offer AvailableOffers get; set;
offer BestOffer ----
Supplier LastSupplier get; set;
Order LastOrder get; set;
Extra Methods Description
ReceiveOffers() Add a new offer in the list of AvailableOffers
Order SendOrder(Offer offer) Send Offer to Accounting Deparment
double OfferValue(Offer offer) Calcualtes the value of offer

🏦Production

Type Properties Methods
Factory Factory get, set
ProductionPolicy ProductionPolicy get, set
string Description get, set
Extra Methods Description
IProduct CreateProduct(string productName) Choose what kind of Chocolate we want to create

📦Warehouse

Type Properties Methods
int DepartmentID get, set
string Description get, set
int ManagerID get, set

🏫Factory

Type Properties Methods
Warehouse Warehouse get, set
Production Production get, set
Company Company get, set
Accounting Accounting get, set
List of Shop Shops get, set
Extra Methods Description
OpeningActions() Set the opening actions of factory
DailyActions(DateTime currentDate) Set the daily actions of factory
YearlyActions() Set the yearly actions of factory

🏪Shop

Type Properties Methods
Company Company get, set
List of Product Products get, set
List of Employee Employees get, set
Dictionary string, int DailyProductsSold {the products for sale}etc "WhiteChocolate"
string Location get, set
decimal DailyEarnings get, set
Extra Methods Description
SellProduct(string productName) Sell Product, add the price Of Product in Daily, increase DailyProductsSold
ServeCustomer(List string productsToSell) Get the order of Customer and check if the products have value more than 30 euro
DailyActions(DateTime date) What do extactly every day the object Shop
DailyReport() Daily report of sales and earnings
SendDailyEarnings() The Shop send the daily earnings to object Company
IsProductQuantityLow() Check the Avalaible Quantity of Products of Shop
RefillProducts() Refill Products,if the IsProductQuantityLow() is true
ReceiveProduct() Receive Product from Warehouse
RemoveExpiredProducts(DateTime currentDate) Check if the Products have passed the ExpiredDate and it throws away.

/Human/

🧑IHuman

Type Properties Methods
string FirstName get, set
string LastName get, set

👷‍♂️IEmployee

Type Properties Methods
int EmployeeID get
string DeparmentId get
string ManagerId get
decimal Salary get, set
string EmailAddres get, set

👨‍🏭Employee

Type Properties Methods
int EmployeeID get
string DeparmentId get
string ManagerId get
decimal Salary get, set
string FirstName get, set
string LastName get, set
string EmailAddres get, set
double Phone get, set

👴Supplier

Type Properties Methods
int ID get, set
string FirstName get, set
string LastName get, set
double PhoneNumber get, set
Extra Methods Description
SendSupplies(Order order) Send Supplies from Supplier to Production
endOffer(decimal pricePerKilo, Quality quality, int suppliesKilos) Send Offer to Accounting Deparment

🍫Products

IProduct

Type Properties Methods
int ID get, set
string Description get, set
DateTime ProductionDate get, set
DateTime ExpirationDate get, set
decimal Price get, set

IChocolate

  • DarkChocolate
  • WhiteChocolate
  • ExperimentalProduct

IMilkChocolate

  • PlainMilkChocolate
  • AlmondMilkChocolate
  • HazelnutMilkChocolate

Offer-Order

Type Properties Methods
decimal PricePerKilo get, set
Quality Quality get, set
int Quantity get, set
decimal TotalCost get, set
Supplier Supplier get, set
Factory Factory get, set

👮Policy

CompanyPolicy

Type Properties Methods
FactoryPolicy Factory get, set
ProductionPolicy Production get, set
PricePolicy Pricing get, set
ShopPolicy Shop get, set

FactoryPolicy

Type Properties Methods
int DailyProducts get, set
double LowSuppliesThresholdPercent get, set
double MinimumRevenueToInvest get, set
double RevenueYearlyGoal get, set
int NumberOfOffers get, set

ProductionPolicy

Type Properties Methods
double BlackChocolatePercent get, set
double WhiteChocolatePercent get, set
double MilkChocolatePercent get, set
double AlmondMilkChocolatePercent get, set
double HazelnutMilkChocolatePercent get, set
int BlackChocolateSupplies get, set
int WhiteChocolateSupplies get, set
int AlmondMilkChocolateSupplies get, set
int HazelnutMilkChocolateSupplies get, set
int ExperimentalChocolateSupplies get, set

ShopPolicy

Type Properties Methods
double ProductsToShopPercent get, set
double ShopRestockPercent get, set
int ShopStockSize get, set
int ShopRestockThreshold get, set
double ShopDiscount get, set
DayOfWeek DiscountDay get, set
int DiscountDayOccurence get, set
decimal GiftMinimumPrice get, set

PricePolicy

Type Properties Methods
decimal BlackChocolatePrice get, set
decimal WhiteChocolatePrice get, set
decimal MilkChocolatePrice get, set
decimal AlmondMilkChocolatePrice get, set
decimal HazelnutMilkChocolatePrice get, set

🔨Services

Title Description
ICustomerService Interface for CustomerService
ISupplierService Interface for SupplierService
CustomerService
SupplierService
RandomGenerator Create random data for different processes
ImportJsonHelper Import data from json to list of object

📈Business Logic Diagram


Business Logic


🎖️Tasks

Project status

  • Analysis
  • Design
  • Development
  • Unit testing
  • Mockup Data

🖥️Technologies + recourses

Technologies

  • Programming Language C#
  • Framework .NET 4.7.3
  • Console Application

Recourses


🤝Team