//todo: is this returning a model, not a dto all the way up to the client web site??? public Account GetAccount(string accountNumber) { var billingAccount = odsDao.GetBillingAccount(accountNumber); if ( billingAccount == null ) { logger.ErrorFormat(string.Format("Account with accountNumber {0} does not exist", accountNumber)); throw new ApplicationException(string.Format("Account with accountNumber {0} does not exist", accountNumber)); } var CartAccount = accountDao.GetAccount(accountNumber); Account acct = new Account(); var groups = new Dictionary<string,LineItemGroup>(); acct.AccountNumber = accountNumber; //acct.FormattedCustomerName = billingAccount.tblParty.FullName; Balance dueBalance = billingAccount.tblBalances.FirstOrDefault(b => b.BalanceTypeId == OdsValueConsts.BalanceTypes.AccountBilledAmount); acct.DueDate = dueBalance == null ? "" : dueBalance.BalanceDate.ToString(); acct.DueAmount = dueBalance == null ? 0m : dueBalance.BalanceAmount ?? 0m; billingAccount.tblPolicyBillingAccounts.ToList() .ForEach(billAccts=> //groups roughly correlate to product types and lineItems to policy terms/modules { //Handle Lines / terms List<Balance> balances = billAccts.tblBalances.ToList(); var due = balances .FirstOrDefault(bal => bal.BalanceTypeId == OdsValueConsts.BalanceTypes.PolOpenRecievableDueAmount ); var balance = balances .FirstOrDefault(bal => bal.BalanceTypeId == OdsValueConsts.BalanceTypes.PolOutstandingBalanceAmount); if ( due != null && balance != null) { var line = new LineItem() { Id = due.BalanceId.ToString() , Name = billAccts.tblPolicy.Number + "-" + billAccts.PBPolicyModule.ToString() , ProductNumber= billAccts.tblPolicy.Number + "-" + billAccts.PBPolicyModule.ToString() , AmountDue = due.BalanceAmount ?? 0m , ProductBalance = balance.BalanceAmount ?? 0m , ProductMasterCompanyNumber = billAccts.tblPolicy.Product.FBCompany.CompanyCode , AmountDescription = "Some Amount Description" //TODO: fix value , ProductIssueSystemCode = "ABC" //TODO: fix value , Status = billAccts.tblPolicyStatu.Description //TODO: apply description logic }; //Handle Groups / line of business LineItemGroup group; //if there isn't already a group for this lob, build it. string groupName = billAccts.tblPolicy.Product.LineOfBusiness.LongName; if ( ! groups.ContainsKey(groupName)) { group = new LineItemGroup(); group.GroupName = groupName; groups[groupName] = group; acct.LineItemGroups.Add(group); } group = groups[groupName]; group.LineItems.Add(line); } } ); if ( CartAccount != null ) { acct.Carts = CartAccount.Carts; acct.Payments = CartAccount.Payments; } return acct; }
public bool SaveAmountsToCart(String AccountId, ICollection<AmountToPayDTO> Amounts) { //todo: transact service //todo: account pessimistic lock? var acct = accountDao.GetAccount(AccountId); //cart account if ( acct == null ) { accountDao.AddAccount(acct = new Account(){Id = Guid.NewGuid(), AccountNumber = AccountId} ); } acct.Cart = new Cart() { Id = Guid.NewGuid() , CartItems = new Collection<CartItem>() }; //Add a cart item for each AmountToPayDTO Amounts.ToList().ForEach(amt=>acct.Cart.CartItems.Add(new CartItem() {AmountToPay=amt.AmountToPay , LineItemId = amt.LineItemId}) ); accountDao.SaveAll(); return true; }