示例#1
0
        public JsonResult  Generate([FromBody] BillGenerateInput input)
        {
            var result = BusinessService.GenerateBill(input);

            var ret = $"{{\"msg\":\"{result}\"}}";

            return(new JsonResult(ret));
        }
示例#2
0
        private void GenerateBillGroupDetail(BillGenerateInput input, int month, int year)
        {
            var bgids = (from us in UnitSummary
                         where us.divisionid == Convert.ToInt32(input.DivisionId)
                         select us.billgroupid).Distinct();
            var bgs = from bg in BillGroup
                      join bgid in bgids on bg.Id equals bgid
                      select bg;
            var bglist = new List <BillGroupDetail>();

            foreach (var bg in bgs)
            {
                var bgdetail = from bgd in BillGroupDetail
                               where bgd.BillGroupId == bg.Id &&
                               bgd.BillMonth == month && bgd.BillYear == year
                               select bgd;
                if (!bgdetail.Any())
                {
                    var      addThis   = false;
                    DateTime startDate = new DateTime(year, month, (int)bg.StartDay);
                    DateTime endDate   = startDate;// = startDate.AddMonths(2);
                    DateTime billDate  = startDate.AddDays(1);
                    DateTime dueDate   = billDate.AddDays(bg.DueDays);

                    if (bg.BiMonthly && month % 2 == (bg.BiMonthlyEven ? 0 : 1))
                    {
                        addThis = true;
                        endDate = startDate.AddMonths(2).AddDays(-1);
                    }
                    if (!bg.BiMonthly)
                    {
                        addThis = true;
                        endDate = startDate.AddMonths(1).AddDays(-1);
                    }
                    if (addThis)
                    {
                        bglist.Add(new DataModels.Billing.BillGroupDetail()
                        {
                            BillDate    = billDate,
                            BillGroupId = bg.Id,
                            BillMonth   = month,
                            BillYear    = year,
                            DivisionId  = Convert.ToInt32(input.DivisionId),
                            DueDate     = dueDate,
                            StartDate   = startDate,
                            EndDate     = endDate,
                            Status      = "Created"
                        });
                    }
                }
            }
            if (bglist.Count > 0)
            {
                BillGroupDetail.AddRange(bglist);
            }
            this.SaveChanges();
        }
示例#3
0
        public List <KeyValuePair <long, string> > GetBillGroupList(BillGenerateInput input)
        {
            var month = Convert.ToInt32(input.MonthYear.Substring(0, 2));
            var year  = Convert.ToInt32(input.MonthYear.Substring(2));

            var result = from bg in BillGroup
                         join bgd in BillGroupDetail
                         on bg.Id equals bgd.BillGroupId
                         where bgd.DivisionId == Convert.ToInt32(input.DivisionId) &&
                         bgd.BillYear == year &&
                         bgd.BillMonth == month
                         select new KeyValuePair <long, string>(bgd.Id, bg.Code);

            return(result.ToList());
        }
示例#4
0
        public string GenerateBill(BillGenerateInput input)
        {
            var month     = Convert.ToInt32(input.MonthYear.Substring(0, 2));
            var year      = Convert.ToInt32(input.MonthYear.Substring(2));
            var lastDay   = DateTime.DaysInMonth(year, month);
            var startDate = Convert.ToDateTime($"01/{month}/{year}");
            var stopDate  = Convert.ToDateTime($"{lastDay}/{month}/{year}");
            var units     = from us in UnitSummary select us;

            if (!string.IsNullOrEmpty(input.DivisionId))
            {
                units = units.Where(ob => ob.divisionid == Convert.ToInt32(input.DivisionId));
            }
            if (!string.IsNullOrEmpty(input.SubDivisionId))
            {
                units = units.Where(ob => ob.subdivisionid == Convert.ToInt32(input.SubDivisionId));
            }
            if (!string.IsNullOrEmpty(input.Category))
            {
                units = units.Where(ob => ob.meterbillingtype == input.Category);
            }
            var unitids = (from us in units
                           select us.unitid).Distinct().ToList();
            var exist = (from bill in Bills
                         join ui in units
                         on bill.UnitId equals ui.id
                         where bill.MonthYear == input.MonthYear
                         select ui).Any();

            if (exist)
            {
                return("Already Bill Generated for this Period.");
            }

            //join uc in UnitConsumptionDetails
            //on us.id equals uc.unitid
            //where us.meterbillingtype == "AM"
            //&&
            //uc.DateRecorded >= startDate &&
            //uc.DateRecorded <= stopDate
            //select us.unitid).Distinct().ToList();
            foreach (string unitid in unitids)
            {
                GenerateBillForUnitId(input, unitid, month, year);
            }
            return("Success");
        }
示例#5
0
 public List <KeyValuePair <long, string> > GetBillGroupList(BillGenerateInput input)
 {
     return(Repository.GetBillGroupList(Mapper.Map <DataModels.Billing.BillGenerateInput>(input)));
 }
示例#6
0
        public string GenerateBill(BillGenerateInput input)
        {
            var req = Mapper.Map <DataModels.Billing.BillGenerateInput>(input);

            return(Repository.GenerateBill(req));
        }
示例#7
0
        public List <KeyValuePair <long, string> > GetBillGroupList([FromBody] BillGenerateInput input)
        {
            var result = BusinessService.GetBillGroupList(input);

            return(result);
        }
示例#8
0
        //public BillGroupResult Validate(BillGenerateInput input) {

        //    var bg = (from BgItem in BillGroup
        //              where BgItem.Id == input.GroupId
        //              select BgItem).FirstOrDefault();
        //    if (bg != null)
        //    {
        //        var month = bg.BiMonthly ? 2 : 1;

        //    }
        //    return null;
        //}
        //public string AddBillGroupDetail(BillGenerateInput input)
        //{
        //    var month = Convert.ToInt32(input.MonthYear.Substring(0, 2));
        //    var year = Convert.ToInt32(input.MonthYear.Substring(2));
        //    var lastDay = DateTime.DaysInMonth(year, month);

        //    var bg = (from BgItem in BillGroup
        //              where BgItem.Id == input.GroupId
        //              select BgItem).FirstOrDefault();
        //    if (bg != null)
        //    {

        //    }

        //    return "";
        //}
        private void GenerateBillForUnitId(BillGenerateInput input, string unitid, int month, int year)
        {
            //var uid = (from us in UnitSummary
            //           where us.unitid == unitid
            //           select us.id).FirstOrDefault();
            var unit = (from us in UnitSummary
                        where us.unitid == unitid
                        select us).FirstOrDefault();
            var uid          = unit.id;
            var unitcategory = unit.meterbillingtype;

            //var unitcategory = (from us in UnitSummary
            //           where us.unitid == unitid select us.meterbillingtype)
            //           .FirstOrDefault();
            var billgroup = (from bg in BillGroup
                             where bg.Id == unit.billgroupid
                             select bg).FirstOrDefault();

            var startDate = Convert.ToDateTime($"{billgroup.StartDay}/{month}/{year}");

            var stopDate    = GetLastDay(month, year, (int)billgroup.StartDay, billgroup.BiMonthly);
            var missingDays = (from oldBill in Bills
                               where oldBill.UnitId == uid
                               orderby oldBill.AddedAt descending
                               select oldBill.MissingDays).FirstOrDefault();


            if (billgroup.BiMonthly)
            {
                if (billgroup.BiMonthlyEven && month % 2 == 1)
                {
                    return;
                }
                if (!billgroup.BiMonthlyEven && month % 2 == 0)
                {
                    return;
                }
            }

            var firstConsumption = (from uc in UnitConsumptionDetails
                                    where uc.unitid == uid &&
                                    uc.daterecorded >= startDate.AddDays(-missingDays) &&
                                    uc.daterecorded <= stopDate
                                    orderby uc.daterecorded ascending
                                    select uc.consumptioninmcube).FirstOrDefault();
            var firstDate = (from uc in UnitConsumptionDetails
                             where uc.unitid == uid &&
                             uc.daterecorded >= startDate
                             select uc.daterecorded).Min();

            var lastConsumption = (from uc in UnitConsumptionDetails
                                   where uc.unitid == uid &&
                                   uc.daterecorded >= startDate.AddDays(-missingDays) &&
                                   uc.daterecorded <= stopDate
                                   orderby uc.daterecorded descending
                                   select uc.consumptioninmcube).FirstOrDefault();
            var lastDate = (from uc in UnitConsumptionDetails
                            where uc.unitid == uid &&
                            uc.daterecorded >= startDate &&
                            uc.daterecorded <= stopDate
                            select uc.daterecorded).Max();

            var consumption = lastConsumption - firstConsumption;
            var bill        = new Bill();

            bill.MonthYear    = input.MonthYear;
            bill.UnitId       = uid;
            bill.FirstReading = firstConsumption;
            bill.LastReading  = lastConsumption;
            bill.Consumption  = consumption;
            bill             = CalculateTariff(unitid, consumption, unitcategory, bill, year, Convert.ToInt32(input.DivisionId));
            bill.BillDate    = input.BillDate; //DateTime.Now;
            bill.DueDate     = input.DueDate;  //bill.AddedAt.AddDays(15);
            bill.FirstDate   = firstDate;
            bill.LastDate    = lastDate;
            bill.MissingDays = lastDate == DateTime.MinValue ?0: (stopDate - lastDate).Days;
            bill.AddedAt     = DateTime.Now;
            Bills.Add(bill);
            this.SaveChanges();
        }