public List <TrnSoldUnitEquitySchedule> PostImportTrnSoldUnitEquitySchedule(List <TrnSoldUnitEquitySchedule> equitySchedules, string id)
        {
            var soldUnits = from d in db.TrnSoldUnits
                            where d.Id == Convert.ToInt32(id)
                            select d;

            if (soldUnits.Any())
            {
                // Remove existing schedule
                var deleteSchedules = from d in db.TrnSoldUnitEquitySchedules
                                      where d.SoldUnitId == Convert.ToInt32(id)
                                      select d;

                if (deleteSchedules.Any())
                {
                    foreach (var deleteSchedule in deleteSchedules)
                    {
                        db.TrnSoldUnitEquitySchedules.DeleteOnSubmit(deleteSchedule);
                    }
                    db.SubmitChanges();
                }

                // Insert new schedules
                if (equitySchedules.Any())
                {
                    foreach (var equitySchedule in equitySchedules)
                    {
                        Data.TrnSoldUnitEquitySchedule insertSchedule = new Data.TrnSoldUnitEquitySchedule()
                        {
                            SoldUnitId   = Convert.ToInt32(id),
                            PaymentDate  = Convert.ToDateTime(equitySchedule.PaymentDate),
                            Amortization = equitySchedule.Amortization,
                            CheckNumber  = equitySchedule.CheckNumber,
                            CheckDate    = Convert.ToDateTime(equitySchedule.CheckDate),
                            CheckBank    = equitySchedule.CheckBank,
                            Remarks      = equitySchedule.Remarks
                        };

                        db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertSchedule);
                    }
                }

                db.SubmitChanges();
            }

            // Return new requirements
            var TrnSoldUnitEquityScheduleData = from d in db.TrnSoldUnitEquitySchedules
                                                where d.SoldUnitId == Convert.ToInt32(id)
                                                orderby d.PaymentDate ascending
                                                select new TrnSoldUnitEquitySchedule
            {
                Id           = d.Id,
                SoldUnitId   = d.SoldUnitId,
                PaymentDate  = Convert.ToString(d.PaymentDate.Year) + "-" + Convert.ToString(d.PaymentDate.Month + 100).Substring(1, 2) + "-" + Convert.ToString(d.PaymentDate.Day + 100).Substring(1, 2),
                Amortization = d.Amortization,
                CheckNumber  = d.CheckNumber == null ? "" : d.CheckNumber,
                CheckDate    = formatNullableDate(d.CheckDate),
                CheckBank    = d.CheckBank == null ? "" : d.CheckBank,
                Remarks      = d.Remarks
            };

            return(TrnSoldUnitEquityScheduleData.ToList());
        }
        public HttpResponseMessage GetNewTrnSoldUnitEquitySchedule(string id)
        {
            try
            {
                var soldUnits = from d in db.TrnSoldUnits
                                where d.Id == Convert.ToInt32(id)
                                select d;
                if (soldUnits.Any())
                {
                    // Remove existing schedule
                    var deleteSchedules = from d in db.TrnSoldUnitEquitySchedules
                                          where d.SoldUnitId == Convert.ToInt32(id)
                                          select d;

                    if (deleteSchedules.Any())
                    {
                        foreach (var deleteSchedule in deleteSchedules)
                        {
                            db.TrnSoldUnitEquitySchedules.DeleteOnSubmit(deleteSchedule);
                        }
                        db.SubmitChanges();
                    }

                    Data.TrnSoldUnitEquitySchedule insertReservationSchedule = new Data.TrnSoldUnitEquitySchedule()
                    {
                        SoldUnitId    = Convert.ToInt32(id),
                        PaymentDate   = soldUnits.FirstOrDefault().SoldUnitDate,
                        Amortization  = soldUnits.FirstOrDefault().Reservation,
                        PaidAmount    = 0,
                        BalanceAmount = soldUnits.FirstOrDefault().Reservation,
                        Remarks       = "Reservation Fee"
                    };

                    db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertReservationSchedule);
                    db.SubmitChanges();

                    Data.TrnSoldUnitEquitySchedule insertDownpaymentSchedule = new Data.TrnSoldUnitEquitySchedule()
                    {
                        SoldUnitId    = Convert.ToInt32(id),
                        PaymentDate   = soldUnits.FirstOrDefault().SoldUnitDate,
                        Amortization  = soldUnits.FirstOrDefault().DownpaymentValue,
                        PaidAmount    = 0,
                        BalanceAmount = soldUnits.FirstOrDefault().DownpaymentValue,
                        Remarks       = "Downpayment"
                    };

                    db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertDownpaymentSchedule);
                    db.SubmitChanges();

                    // Insert new schedules
                    Int32    noOfPayments       = Decimal.ToInt32(soldUnits.FirstOrDefault().NetEquityNoOfPayments);
                    decimal  amortization       = soldUnits.FirstOrDefault().NetEquityAmortization;
                    DateTime startDate          = soldUnits.FirstOrDefault().SoldUnitDate;
                    decimal  equitySpotPayment1 = soldUnits.FirstOrDefault().EquitySpotPayment1;
                    decimal  equitySpotPayment2 = soldUnits.FirstOrDefault().EquitySpotPayment2;
                    decimal  equitySpotPayment3 = soldUnits.FirstOrDefault().EquitySpotPayment3;

                    DateTime paymentDate = startDate;

                    if (noOfPayments > 0)
                    {
                        for (Int32 p = 1; p <= noOfPayments; p++)
                        {
                            paymentDate = startDate.AddMonths(p);
                            decimal monthlyAmortization = amortization;

                            if (equitySpotPayment1 > 0 && p == 1)
                            {
                                monthlyAmortization = equitySpotPayment1;
                            }
                            if (equitySpotPayment2 > 0 && p == noOfPayments / 2)
                            {
                                monthlyAmortization = equitySpotPayment2;
                            }
                            if (equitySpotPayment3 > 0 && p == noOfPayments)
                            {
                                monthlyAmortization = equitySpotPayment3;
                            }

                            Data.TrnSoldUnitEquitySchedule insertSchedule = new Data.TrnSoldUnitEquitySchedule()
                            {
                                SoldUnitId    = Convert.ToInt32(id),
                                PaymentDate   = paymentDate,
                                Amortization  = monthlyAmortization,
                                PaidAmount    = 0,
                                BalanceAmount = monthlyAmortization,
                                Remarks       = "Equity " + p
                            };

                            db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertSchedule);
                            db.SubmitChanges();
                        }
                    }
                    else
                    {
                        Data.TrnSoldUnitEquitySchedule insertSchedule = new Data.TrnSoldUnitEquitySchedule()
                        {
                            SoldUnitId    = Convert.ToInt32(id),
                            PaymentDate   = paymentDate,
                            Amortization  = soldUnits.FirstOrDefault().NetEquityBalance,
                            PaidAmount    = 0,
                            BalanceAmount = soldUnits.FirstOrDefault().NetEquityBalance,
                            Remarks       = "Equity"
                        };

                        db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertSchedule);
                        db.SubmitChanges();
                    }

                    Data.TrnSoldUnitEquitySchedule insertMiscFeeSchedule = new Data.TrnSoldUnitEquitySchedule()
                    {
                        SoldUnitId    = Convert.ToInt32(id),
                        PaymentDate   = paymentDate.AddMonths(noOfPayments + 1),
                        Amortization  = soldUnits.FirstOrDefault().MiscellaneousFeeAmount,
                        PaidAmount    = 0,
                        BalanceAmount = soldUnits.FirstOrDefault().MiscellaneousFeeAmount,
                        Remarks       = "Miscellaneous Fee"
                    };

                    db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertMiscFeeSchedule);
                    db.SubmitChanges();

                    Data.TrnSoldUnitEquitySchedule insertBalanceSchedule = new Data.TrnSoldUnitEquitySchedule()
                    {
                        SoldUnitId    = Convert.ToInt32(id),
                        PaymentDate   = paymentDate.AddMonths(noOfPayments + 1),
                        Amortization  = soldUnits.FirstOrDefault().Balance,
                        PaidAmount    = 0,
                        BalanceAmount = soldUnits.FirstOrDefault().Balance,
                        Remarks       = "Balance"
                    };

                    db.TrnSoldUnitEquitySchedules.InsertOnSubmit(insertBalanceSchedule);
                    db.SubmitChanges();
                }

                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }