The main purpose of this project was to build a tool which will boost the workflow inside a company by enhancing sale management and providing broader insight into workers' actions. In order to achieve these goals, the app serves various features which are described in the following sections.
- Automapper
- IdentityEF
- Fluent Validation
- MediatR
- JWT
- Swagger
- xUnit
- Moq
- Fluent Assertions
- create-react-app
- react-router-dom
- mobx-react-lite
- am4Charts ... and more
- Postman
- SSMS
- .Net CLI
Seeded users
Login: Admin | Manager | Manager-2 | Employee | Employee-2
Password: Qw123!
Click on the screenshot to see Gif.
* Custom error handling
* Server-side form validation (Fluent Validation with custom tweaks)
* Server-side filtering
* Server-side sorting
* Server-side pagination
* Three levels of access: top(admin), mid(manager), low(employee)
Dashboard includes statistics that let user know what is workers' efficiency and how is the company doing at the moment. User may choose between two periods of time: recent 30 days or 6 months. There are 5 charts:
- sales pipeline - shows the ratio of particular advancement stage towards amount of leads
- source - a pie chart which shows where leads came from
- leads - a chart which shows total amount of leads
- leads/opportunity - a chart which lets user know what is the overall efficiency of converting leads into opportunities
- leads/opportunities by employee - a chart as above, but categorized by workers, so user can see the efficiency of particular worker
Moreover there are stats of this month (from day 1 of the current month) and a calendar which displays tasks related to user.
Contacts section is basically an address book. It includes all CRUD operations. User may add, edit or delete a contact, see contact's details, promote contact to premium member or start a sale process. When sale process is started that way, source of the lead is set to 'Former Client'. The list component is sortable, filterable and paginated. Sortable by header cells, filterable by buttons and search input which sends(on change) request after at least 2 letters are typed in.
This section allows user to control the whole sale process. Every user has an access only to his leads. There are 4 stages: lead, opportunity, quote, invoice. All CRUD operations are available. Every operation in the chain, from lead to conversion, is tracked and registered. User may send straightforward an email to client, upgrade client's status or downgrade it in case of mistake with auto correction of previous operations which is crucial for proper displaying of stats on dashboard. User may choose anytime whether he wants to terminate whole process and keep data about operations which were done during this process or abandon lead and delete all registered operations which are included in this particular process. At the same time user may choose whether he wants to keep this lead in his address book or delete it entirely. Before upgrading client's status to invoice, there has to be an order assigned to the client. Before converting client the order has to be closed. Before terminating a process there must be no order assigned to the client.
The task's list may be filtered by 'my tasks', 'shared by me' or 'shared with me'. Shared tasks have subcategories which filter those tasks by their status. There are 4 states of tasks: 'pending', 'accepted', 'refused', 'done' and all of them are marked with proper icon. Besides all CRUD actions there is also a possibility to share a task. The user whom a task is shared with can see it in 'pending tasks'.
All CRUD operations are included. There are list, history and detail components available in this section. The list component is sortable and filterable (by 'all', 'sale', 'purchase' buttons or search input). History is paginated and also filterable by the type of transactions. User may add an order only to contacts which he posess in his contacts list. A contact may have only 1 active order assigned. User chooses the type of order, client to assign, product, amount and price. He may optionally include some notes.
Basically admin panel is a form. Admin is able to add, edit or delete users. ASP.NET Core Identity is used for this purpose, users are managed with AspNetUserManager. Editing includes setting new password.
Chosen platform to set up CI/CD is Azure.