public async Task <BillDto> Handle(CreateBillRequest request, CancellationToken cancellationToken)
        {
            var billItems = request.BillFormModel.BillItems.Select(item =>
            {
                var billItem = new BillItem(item.BillItem.Description, item.BillItem.Amount, item.BillItem.Discount);

                if (item.PersonId > 0)
                {
                    billItem.AssignPerson(item.PersonId, item.BillItem.Amount);
                }
                return(billItem);
            }).ToList();
            var billToCreate = new Bill(request.BillFormModel.EstablishmentName, request.BillFormModel.BillDate, billItems, request.BillFormModel.Currency);

            billToCreate.Remarks = request.BillFormModel.Remarks;
            billToCreate.SetExternalId(_externalIdGenerator.Generate());


            billToCreate.SetBillItems(billItems);
            billToCreate.SetExtraCharges(request.BillFormModel.ExtraCharges.Select(item => new Core.OwnedEntities.ExtraCharge(item.Description, item.Rate)).ToList());

            request.BillFormModel.Participants.ForEach(participant =>
            {
                billToCreate.AddParticipant(participant.Person.Id);
            });

            _splitThatBillContext.Attach(_contextData.CurrentUser);
            billToCreate.UpdateBillTaker(_contextData.CurrentUser);

            _splitThatBillContext.Add(billToCreate);

            await _splitThatBillContext.SaveChangesAsync();

            return(_mapper.Map <BillDto>(billToCreate));
        }
예제 #2
0
        public void Seed()
        {
            _splitThatBillContext.Database.ExecuteSqlRaw("CALL Add_Currencies");
            var person1 = new Person("lhar", "gil");

            person1.SetExternalId(_externalIdGenerator.Generate());
            person1.AddPaymentDetail(PaymentDetail.Create("Maybank", "34532156778", "Lhar Gil"));

            var person2 = new Person("jon", "snow");

            person2.SetExternalId(_externalIdGenerator.Generate());
            var person3 = new Person("raffy", "tulfo");

            person3.SetExternalId(_externalIdGenerator.Generate());

            if (!_splitThatBillContext.People.Any())
            {
                _splitThatBillContext.People.Add(person1);
                _splitThatBillContext.People.Add(person2);
                _splitThatBillContext.People.Add(person3);
            }

            if (!_splitThatBillContext.Bills.Any())
            {
                var billItem1 = new BillItem("Cup of rice", 3.0M);
                var billITem2 = new BillItem("Ayam goreng", 7.0M);
                var bill      = new Bill("Sri Ayutthaya",
                                         _dateTimeManager.Today,
                                         new List <BillItem> {
                    billItem1,
                    billITem2
                }, "MYR");
                bill.SetExternalId(_externalIdGenerator.Generate());
                bill.AddParticipant(person3);
                bill.AddParticipant(person2);
                bill.AddParticipant(person1);

                var extraCharge1 = new ExtraCharge("Service charge", 0.10M);
                var extraCharge2 = new ExtraCharge("SST", 0.06M);
                bill.AddExtraCharge(extraCharge1);
                bill.AddExtraCharge(extraCharge2);

                person2.AddBillItem(billItem1, billItem1.UnitPrice);
                bill.UpdateBillTaker(person1);

                _splitThatBillContext.Bills.Add(bill);

                var billItem3 = new BillItem("Nasi lemak", 10.0M);
                var billItem4 = new BillItem("Avocado toast", 15.5M);
                var bill2     = new Bill("Feebay.co", _dateTimeManager.Today,
                                         new List <BillItem> {
                    billItem3,
                    billItem4
                }, "MYR");
                bill2.SetExternalId(_externalIdGenerator.Generate());
                bill2.AddParticipant(person1);
                bill2.AddParticipant(person2);

                person1.AddBillItem(billItem4, billItem4.UnitPrice);
                var extraCharge3 = new ExtraCharge("Service charge", 0.10M);
                var extraCharge4 = new ExtraCharge("SST", 0.06M);
                bill2.AddExtraCharge(extraCharge3);
                bill2.AddExtraCharge(extraCharge4);

                bill2.UpdateBillTaker(person1);

                _splitThatBillContext.Bills.Add(bill2);

                _splitThatBillContext.SaveChanges();
            }
        }