main
1using System.Linq;
2using gorilla.commons.utility;
3using MoMoney.Domain.Core;
4using MoMoney.Domain.repositories;
5using MoMoney.DTO;
6using MoMoney.Service.Contracts.Application;
7
8namespace MoMoney.Service.Application
9{
10 public class AddNewIncomeCommand : IAddNewIncomeCommand
11 {
12 readonly IGetTheCurrentCustomerQuery query;
13 readonly Notification notification;
14 readonly IIncomeRepository all_income;
15 readonly ICompanyRepository companys;
16
17 public AddNewIncomeCommand(IGetTheCurrentCustomerQuery query, Notification notification, IIncomeRepository all_income,
18 ICompanyRepository companys)
19 {
20 this.query = query;
21 this.notification = notification;
22 this.all_income = all_income;
23 this.companys = companys;
24 }
25
26 public void run(IncomeSubmissionDTO item)
27 {
28 if (similar_income_has_been_submitted(item))
29 {
30 notification.notify("You have already submitted this income");
31 }
32 else
33 {
34 companys
35 .find_company_by(item.company_id)
36 .pay(
37 query.fetch(),
38 item.amount.as_money(),
39 item.recieved_date
40 );
41 }
42 }
43
44 bool similar_income_has_been_submitted(IncomeSubmissionDTO income)
45 {
46 if (all_income.all().Count() == 0) return false;
47 return all_income
48 .all()
49 .where(x => x.amount_tendered.Equals(income.amount.as_money()))
50 .where(x => x.company.id.Equals(income.company_id))
51 .where(x => x.date_of_issue.Equals(income.recieved_date))
52 .Count() > 0;
53 }
54 }
55}