Exemplo n.º 1
0
        public IDisposable Subscribe(IScheduler scheduler, Action <TMessage> consumeAction)
        {
            var subscribtion = new Subscribtion(this, scheduler, consumeAction);

            _subscribtions.Add(subscribtion);
            return(subscribtion);
        }
Exemplo n.º 2
0
        public virtual IGameListSubscription AddSubscription(PeerBase peer, Hashtable gamePropertyFilter, int maxGameCount)
        {
            var subscribtion = new Subscribtion(this, maxGameCount);

            this.peers.Add(peer);
            return(subscribtion);
        }
        public IDisposable Subscribe(IObserver <WetherStationDTO> observer)
        {
            Subscribtion sub = new Subscribtion(this, observer);

            subscriptions.Add(sub);
            SendAllDataToSubscriber(sub);
            return(sub);
        }
Exemplo n.º 4
0
        public IActionResult Subscribe(int id)
        {
            var book   = _context.Books.Find(id);
            var userId = _userManager.GetUserId(User);
            var user   = _userManager.FindByIdAsync(userId).Result;

            var sub = new Subscribtion
            {
                ApplicationUser = user,
                Book            = book,
            };

            _context.Subscribtions.Add(sub);
            _context.SaveChanges();
            return(Ok());
        }
 private void SendAllDataToSubscriber(Subscribtion sub)
 {
     foreach (var temp in temperature)
     {
         sub.Obserwer.OnNext(new WetherStationDTO()
         {
             Humidity    = null,
             Pressure    = null,
             Temperature = temp,
             Rain        = null
         });
     }
     foreach (var pres in pressure)
     {
         sub.Obserwer.OnNext(new WetherStationDTO()
         {
             Humidity    = null,
             Pressure    = pres,
             Temperature = null,
             Rain        = null
         });
     }
     foreach (var hum in humidity)
     {
         sub.Obserwer.OnNext(new WetherStationDTO()
         {
             Humidity    = hum,
             Pressure    = null,
             Temperature = null,
             Rain        = null
         });
     }
     foreach (var ri in rain)
     {
         sub.Obserwer.OnNext(new WetherStationDTO()
         {
             Humidity    = null,
             Pressure    = null,
             Temperature = null,
             Rain        = ri
         });
     }
 }
Exemplo n.º 6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                IEnumerable <Department> dep;
                using (ClubDBEntities club = new ClubDBEntities())
                {
                    dep = (from i in club.Departments
                           select i).ToList();
                }
                ddlDep.DataSource     = dep;
                ddlDep.DataTextField  = "Name";
                ddlDep.DataValueField = "DepID";
                ddlDep.DataBind();
                //if (Request["new"] != null)
                //{
                //    tbFile.Text = Request["new"].ToString();
                //    getName();

                //}
                if (Request["SubID"] != null)
                {
                    edit = true;
                    int subid = Convert.ToInt32(Request["SubID"]);
                    using (ClubDBEntities club = new ClubDBEntities())
                    {
                        var result = (from i in club.Subscribtions
                                      where i.SubID == subid
                                      select i).First();
                        sub         = result;
                        tbFile.Text = result.ClientID.ToString();
                        getName();
                        ddlDep.SelectedValue = result.Service.DepID.ToString();
                        getDocSer();
                        ddlServices.SelectedValue = result.ServiceID.ToString();
                        //lblDoc.Visible = false;
                        //ddlDoc.Visible = false;
                        pnlMember.Enabled  = false;
                        pnlService.Enabled = false;
                    }
                }
            }
        }
Exemplo n.º 7
0
        public IActionResult Likeidea(int id)
        {
            int?UserId = HttpContext.Session.GetInt32("UserId");

            if (UserId == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            Subscribtion subscribtion = new Subscribtion
            {
                UserId = (int)UserId,
                IdeaId = id,
            };

            _context.subscribtions.Add(subscribtion);
            _context.SaveChanges();
            // ViewBag.Idea=_context.ideas.Where(i=>i.IdeaId==id).Include(i=>i.subscribtions).ToList().First();
            // ViewBag.User=_context.users.Where(u=>u.UserId==id).Include(u=>u.ideas).Include(u=>u.subscribtions).ToList().First();
            return(RedirectToAction("Main"));
        }
 public void RemoveSubscription(Subscribtion sub)
 {
     subscriptions.Remove(sub);
 }
Exemplo n.º 9
0
        public void Execute(IJobExecutionContext context)
        {
            //context.Trigger.JobDataMap.GetString("");
            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 6000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        //SELECT DATEDIFF(minute, GETDATE(), '2006-01-01 00:00:00.0000000');
                        //string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id WHERE cr.status=0 AND DATEDIFF(day,Convert(varchar(10), getdate(), 126)+' 23:59:0.000',cr.finish_date)=2";
                        //string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id where DATEDIFF(second, GETDATE(), cr.finish_date)<=60 AND DATEDIFF(second, GETDATE(), cr.finish_date)>=30";
                        //string sql = @"SELECT cr.id FROM book.Cards as cr WHERE cr.card_num = '38067026'";
                        string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id where DATEDIFF(day, '" + DateTime.Now + "', cr.finish_date)=0";
                        //string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id where abonent_num='9105560' or abonent_num='1086681'";
                        List <Param>    Params       = _db.Params.ToList();
                        string[]        address      = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                        string          username     = Params.First(p => p.Name == "SMSPassword").Value;
                        string          password     = Params.First(p => p.Name == "SMSUsername").Value;
                        int             osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value);
                        List <Card>     cards;
                        MessageTemplate message;     // = _db.AutoMessageTemplates.Where(m => m.Name == "ReportDisabling").FirstOrDefault();
                        MessageTemplate message_geo; // = _db.AutoMessageTemplates.Where(m => m.Name == "ReportDisabling_GEO").FirstOrDefault();

                        int[] ids = _db.Database.SqlQuery <int>(sql).ToArray();

                        //original source
                        //cards = _db.Cards.Include("Customer")//.Include("Receiver").Include("Tower")
                        //                            .Where(c => c.CardStatus == CardStatus.Active && c.Customer.Type != CustomerType.Technic)
                        //                            .Where(c => ids.Contains(c.Id))
                        //                            .Select(c => c).ToList();

                        cards = _db.Cards.Where(c => ids.Contains(c.Id)).Where(c => c.CardStatus == CardStatus.Active && c.Customer.Type != CustomerType.Technic).ToList();

                        foreach (Card card in cards)
                        {
                            message     = _db.MessageTemplates.Where(m => m.Name == "OnShare8Active").FirstOrDefault();
                            message_geo = _db.MessageTemplates.Where(m => m.Name == "OnShare8Active_GEO").FirstOrDefault();



                            Subscribtion curr_sb                  = _db.Subscribtions.Where(s => s.CardId == card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp        = _db.SubscriptionPackages.Where(s => s.SubscriptionId == curr_sb.Id).ToList();
                            List <Package>             curr_packs = new List <Package>();
                            foreach (var sbs in sbp)
                            {
                                List <Package> package = _db.Packages.Where(p => p.Id == sbs.PackageId).ToList();
                                //if (package.RentType != RentType.block)
                                //{
                                //    curr_packs.Add(package);
                                //}
                                if (package.Any(p => p.Id == 304085))
                                {
                                    CardDetailData _cardt = _db.Cards.Where(c => c.Id == card.Id).Select(c => new CardDetailData
                                    {
                                        PaymentAmount  = c.Payments.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                        ChargeAmount   = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                        Card           = c,
                                        IsBudget       = c.Customer.IsBudget,
                                        CustomerType   = c.Customer.Type,
                                        SubscribAmount = c.Subscribtions.Where(s => s.Status).FirstOrDefault().Amount,
                                        CasIds         = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId),
                                        MinPrice       = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice),
                                        CardLogs       = c.CardLogs.ToList()
                                    }).FirstOrDefault();

                                    double balance = Math.Round((double)Utils.Utils.GetBalance(_cardt.PaymentAmount, _cardt.ChargeAmount), 2);

                                    string messageText     = String.Format(message.Desc, card.AbonentNum);
                                    string messageText_Geo = message_geo.Desc;// String.Format(message_geo.MessageText, card.FinishDate.ToString("dd/MM/yyyy"), card.AbonentNum);

                                    CASSocket _socket = new CASSocket()
                                    {
                                        IP = address[0], Port = int.Parse(address[1])
                                    };
                                    _socket.Connect();

                                    if (!_socket.SendOSDRequest(int.Parse(card.CardNum), messageText_Geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                    {
                                        //_db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //{
                                        //    CardId = card.Id,
                                        //    MessageId = message_geo.Id,
                                        //    MessageType = MessageType.OSD,
                                        //});
                                    }

                                    _socket.Disconnect();

                                    //_db.SaveChanges();

                                    string phoneto = _db.Customers.Where(cs => cs.Id == card.CustomerId).Select(cu => cu.Phone1).FirstOrDefault();
                                    Task.Run(async() => { await Utils.Utils.sendMessage(phoneto, messageText); }).Wait();
                                    _db.MessageLoggings.Add(new MessageLogging()
                                    {
                                        card_id    = card.Id,
                                        tdate      = DateTime.Now,
                                        status     = MessageLoggingStatus.OnShare8Active,
                                        message_id = message.Id
                                    });
                                    _db.SaveChanges();
                                    break;
                                }
                            }



                            //message.MessageText = String.Format(message.MessageText, card.FinishDate.ToString("dd/MM/yyyy"), card.AbonentNum);
                            //message_geo.MessageText = String.Format(message_geo.MessageText, card.FinishDate.ToString("dd/MM/yyyy"), card.AbonentNum);
                        }
                        Task.Run(async() => { await Utils.Utils.sendMessage("598733767", "დამთავრდა სმს გაგზავნა გათიშვის დღეს 8-₾ აბონენტებისთვის"); }).Wait();
                        Task.Run(async() => { await Utils.Utils.sendMessage("593668668", "დამთავრდა სმს გაგზავნა გათიშვის დღეს 8-₾ აბონენტებისთვის"); }).Wait();
                        Task.Run(async() => { await Utils.Utils.sendMessage("571711305", "დამთავრდა სმს გაგზავნა გათიშვის დღეს 8-₾ აბონენტებისთვის"); }).Wait();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                    }
                }
            }
        }
Exemplo n.º 10
0
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                AutoSubscribJob autosubscr = new AutoSubscribJob();
                autosubscr.Execute(null);
            }
            catch (Exception ex)
            {
            }
            int coeff = 30;// DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 10000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        var      _params                   = _db.Params.ToList();
                        string[] charge_vals               = _params.First(c => c.Name == "CardCharge").Value.Split(':');
                        string[] address                   = _params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                        int      closed_card_days          = int.Parse(_params.First(c => c.Name == "ClosedCardDays").Value);
                        decimal  closed_daily_amount       = decimal.Parse(_params.First(c => c.Name == "CloseCardDailyAmount").Value);
                        int      closed_daily_amount_limit = int.Parse(_params.First(c => c.Name == "CloseCardDailyAmountLimit").Value);
                        decimal  jurid_limit_months        = decimal.Parse(_params.First(c => c.Name == "JuridLimitMonths").Value);
                        int      service_days              = int.Parse(_params.First(c => c.Name == "ServiceDays").Value);
                        decimal  close_amount              = decimal.Parse(_params.First(p => p.Name == "CloseCardAmount").Value);
                        int      free_days                 = Convert.ToInt32(_params.First(p => p.Name == "FreeDays").Value);
                        int      block_card_days           = Convert.ToInt32(_params.First(p => p.Name == "BlockCardDays").Value);
                        coeff = Convert.ToInt32(_db.Params.First(p => p.Name == "ServiceDays").Value);
                        int?closed_card_limit = Convert.ToInt32(_db.Params.First(p => p.Name == "ClosedCardsLimit").Value);

                        if (closed_card_limit == null)
                        {
                            closed_card_limit = 60;
                        }

                        File.AppendAllText(@"C:\DigitalTV\log.txt", "start: " + DateTime.Now.ToString() + "\r\n");

                        DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(charge_vals[0]), int.Parse(charge_vals[1]), 0); //DateTime.Parse("2016-12-16 00:01:00", CultureInfo.InvariantCulture);//
                        //if (_db.CardCharges.Any(c => c.Tdate == today))
                        //{
                        //    File.AppendAllText(@"C:\TVMobile\log.txt", "return ");
                        //    return;
                        //}
                        var _blocked_cards = _db.Customers.Select(c => new { Cards = c.Cards.Where(p => p.CardStatus != CardStatus.Canceled && p.CardStatus != CardStatus.Blocked) })
                                             .Where(c => c.Cards.Any(s => (s.Payments.Select(p => p.Amount).DefaultIfEmpty().Sum() - s.CardCharges.Select(p => p.Amount).DefaultIfEmpty().Sum() < 0 && c.Cards.Any(p => p.CardStatus == CardStatus.Closed))))
                                             .SelectMany(c => c.Cards).GroupBy(c => c.CustomerId).ToList();

                        SendMiniSMS sendMiniSMS = new SendMiniSMS();
                        CASSocket   _socket     = new CASSocket()
                        {
                            IP = address[0], Port = int.Parse(address[1])
                        };
                        //_socket.Connect();

                        //foreach (var group in _blocked_cards)
                        //{
                        //    if (!group.Any(g => g.CardStatus == CardStatus.Closed && (today - g.CloseDate).Days == block_card_days))
                        //        continue;
                        //    foreach (Card _card in group)
                        //    {
                        //        if (_card.CardStatus == CardStatus.Active)
                        //        {
                        //            //original code
                        //            //decimal amount = (decimal)(_db.Subscribtions.Include("SubscriptionPackages.Package").Where(s => s.CardId == _card.Id).FirstOrDefault(s => s.Status).Amount / coeff);

                        //            decimal amount = (decimal)(_db.Subscribtions.Include("SubscriptionPackages.Package").Where(s => s.CardId == _card.Id).FirstOrDefault(s => s.Status).Amount / coeff/ Utils.Utils.divide_card_charge_interval);
                        //            amount -= (amount * (decimal)_card.Discount / 100);
                        //            if (amount <= 0)
                        //                continue;
                        //            _db.CardCharges.Add(new CardCharge() { CardId = _card.Id, Amount = amount, Tdate = today, Status = CardChargeStatus.Daily });
                        //        }

                        //        _db.CardLogs.Add(new CardLog() { CardId = _card.Id, Date = today, Status = CardLogStatus.BlockToMinusBalance, UserId = 1, CardStatus = _card.CardStatus });

                        //        _card.CardStatus = CardStatus.Blocked;
                        //        _db.Entry(_card).State = System.Data.Entity.EntityState.Modified;

                        //        if (!_socket.SendCardStatus(Convert.ToInt32(_card.CardNum), false, DateTime.SpecifyKind(today, DateTimeKind.Utc)))
                        //        {
                        //            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                        //            {
                        //                Date = today,
                        //                CardNum = _card.CardNum,
                        //                ChargeCrushLogType = Models.ChargeCrushLogType.Block,
                        //                Text = "ბარათი: " + _card.CardNum + ";" + _card.AbonentNum
                        //            });
                        //        }
                        //    }
                        //}

                        _db.SaveChanges();
                        //_socket.Disconnect();


                        var _cards = _db.Cards.Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData
                        {
                            CustomerType         = c.Customer.Type,
                            IsBudget             = c.Customer.IsBudget,
                            SubscribAmount       = c.Subscribtions.FirstOrDefault(s => s.Status).Amount,
                            CasIds               = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId),
                            PaymentAmount        = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0,
                            ChargeAmount         = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            Card                 = c,
                            MinPrice             = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice),
                            ServiceAmount        = c.CardCharges.Where(s => s.Status == CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            WithoutServiceAmount = c.CardCharges.Where(s => s.Status != CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            CardServices         = c.CardServices.ToList()
                        }).ToList();

                        _socket.Connect();
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Closed))
                        {
                            //if(_card.Card.ClosedIsPen != null)
                            //if ((bool)_card.Card.ClosedIsPen)
                            //{
                            //    if (!(_card.CustomerType == CustomerType.Juridical && _card.IsBudget))
                            //    {
                            //        if (closed_daily_amount > 0)
                            //        {
                            //            if ((today - _card.Card.CloseDate).Days <= closed_daily_amount_limit)
                            //            {
                            //                _db.CardCharges.Add(new CardCharge() { CardId = _card.Card.Id, Amount = closed_daily_amount, Tdate = today, Status = CardChargeStatus.PenDaily });
                            //            }
                            //        }
                            //    }

                            //    if ((today - _card.Card.CloseDate).Days == closed_card_days)
                            //    {
                            //        _db.CardCharges.Add(new CardCharge() { CardId = _card.Card.Id, Amount = close_amount, Tdate = today, Status = CardChargeStatus.Pen });
                            //    }
                            //}

                            Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp = _db.SubscriptionPackages.Include("Package").Where(s => s.SubscriptionId == sb.Id).ToList();
                            //Package package = _db.Packages.Where(p => p.Id == sbp.PackageId).First();

                            //if (_card.CustomerType != CustomerType.Juridical)
                            {
                                //Subscribtion subscribe = _card.Card.Subscribtions.Where(s => s.Status == true).FirstOrDefault();
                                //if(subscribe != null)
                                //{
                                //    if(subscribe.SubscriptionPackages.Any(s => s.Package.Name.Contains("აქცია 8")) && (subscribe.Tdate.Day == today.Day && subscribe.Tdate.Month == today.Month && subscribe.Tdate.Year == today.Year))
                                //    {
                                //        continue;
                                //    }
                                //}

                                if (sbp.Any(p => p.Package.RentType == RentType.rent))
                                {
                                    if ((today - _card.Card.CloseDate).Days <= closed_card_limit)
                                    {
                                        _db.CardCharges.Add(new CardCharge()
                                        {
                                            CardId = _card.Card.Id, Amount = Math.Round((decimal)0.10, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                        });
                                    }
                                    else
                                    {
                                        //this.AddLoging(_db,
                                        //     LogType.Card,
                                        //     LogMode.CardDeal,
                                        //     user_id,
                                        //     _card.Card.Id,
                                        //     _card.Card.AbonentNum + " - ბარათი დაიბლოკა",
                                        //     new List<LoggingData>() { new LoggingData { field = "", new_val = "ბარათი დაიბლოკა", old_val = "" } }
                                        //  );


                                        if (!_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), false, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc)))
                                        {
                                            //throw new Exception(_card.Card.CardNum + ": ბარათი ვერ დაიბლოკა!");

                                            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                            {
                                                Date               = today,
                                                CardNum            = _card.Card.CardNum,
                                                ChargeCrushLogType = ChargeCrushLogType.Block,
                                                Text               = _card.Card.CardNum + ": ბარათი ვერ დაიბლოკა! Cas შეცდომის კოდი: " + _socket.error_code + " , Exeption Message: " + _socket.ErrorEx
                                            });
                                        }
                                        else
                                        {
                                            CardLog _log = new CardLog()
                                            {
                                                CardId = _card.Card.Id, Date = DateTime.Now, Status = CardLogStatus.Blocked, UserId = 1, CardStatus = _card.Card.CardStatus
                                            };
                                            _db.CardLogs.Add(_log);

                                            _card.Card.CardStatus       = CardStatus.Blocked;
                                            _db.Entry(_card.Card).State = EntityState.Modified;

                                            Logging _logging = new Logging
                                            {
                                                Tdate     = DateTime.Now,
                                                Type      = LogType.Card,
                                                UserId    = 1,
                                                Mode      = LogMode.CardDeal,
                                                TypeId    = _card.Card.Id,
                                                TypeValue = _card.Card.AbonentNum + " - ბარათი დაიბლოკა(სისტემა)"
                                            };
                                            _db.Loggings.Add(_logging);
                                            _db.SaveChanges();

                                            _db.LoggingItems.AddRange(new List <LoggingData>()
                                            {
                                                new LoggingData {
                                                    field = "", new_val = "ბარათი დაიბლოკა(სისტემა)", old_val = ""
                                                }
                                            }.Where(c => c.field != null).Select(c => new LoggingItem
                                            {
                                                LoggingId     = _logging.Id,
                                                ColumnDisplay = c.field.Replace(':', ' ').Trim(),
                                                NewValue      = c.new_val,
                                                OldValue      = c.old_val
                                            }));

                                            decimal balance = (_card.PaymentAmount - _card.ChargeAmount);
                                            string  phone   = _db.Customers.Where(c => c.Id == _card.Card.CustomerId).First().Phone1;
                                            //MessageTemplate message = _db.MessageTemplates.Single(m => m.Name == "OnBlock");
                                            //string message_desc = message.Desc; // String.Format(message.Desc, Math.Round((balance), 2));
                                            //Task.Run(async () => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                        }
                                    }
                                }
                            }
                        }
                        _db.SaveChanges();
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Rent))
                        {
                            if (_card.Card.RentFinishDate <= today && _card.CustomerType != CustomerType.Technic)
                            {
                                _card.Card.CardStatus       = CardStatus.Closed;
                                _card.Card.CloseDate        = today;
                                _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                _db.CardCharges.Add(new CardCharge()
                                {
                                    CardId = _card.Card.Id, Amount = Math.Round((decimal)0.10, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                });
                                _db.CardLogs.Add(new CardLog()
                                {
                                    CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                });
                            }
                            else
                            {
                                RentAccrualsPresentation rentAccrualsPresentation = new RentAccrualsPresentation(_db);
                                if (rentAccrualsPresentation.RentBalance(_card.Card.Id) >= rentAccrualsPresentation.RentDayAmount())
                                {
                                    rentAccrualsPresentation.CardAccruals(_card);
                                }
                            }
                        }
                        _db.SaveChanges();
                        //paused_cards
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Paused))
                        {
                            if (_card.Card.PauseDate.AddDays(_card.Card.PauseDays) <= today)
                            {
                                bool status_sign = (_card.PaymentAmount - _card.ChargeAmount) >= (decimal)_card.MinPrice / 30m;

                                _card.Card.CardStatus = status_sign ? CardStatus.Active : CardStatus.Closed;
                                _card.Card.PauseDays  = 0;


                                CardLog _log = new CardLog(); /*{ CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Open, UserId = 1 };*/
                                RentAccrualsPresentation rentAccrualsPresentation = new RentAccrualsPresentation(_db);
                                if (_card.Card.CardStatus == CardStatus.Closed && rentAccrualsPresentation.RentBalance(_card.Card.Id) >= rentAccrualsPresentation.RentDayAmount())
                                {
                                    rentAccrualsPresentation.CardAccruals(_card);
                                    rentAccrualsPresentation.RentFinishDat(_card);
                                }
                                if (_card.Card.CardStatus == CardStatus.Closed)
                                {
                                    _log.CardId = _card.Card.Id;
                                    _log.Date   = today;
                                    _log.Status = CardLogStatus.Close;
                                    _log.UserId = 1;

                                    _card.Card.CloseDate = today;
                                }
                                else if (_card.Card.CardStatus == CardStatus.Active)
                                {
                                    _log.CardId = _card.Card.Id;
                                    _log.Date   = today;
                                    _log.Status = CardLogStatus.Open;
                                    _log.UserId = 1;
                                }


                                _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                _db.CardLogs.Add(_log);

                                if (!_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), true, DateTime.SpecifyKind(today, DateTimeKind.Utc)))
                                {
                                    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                    {
                                        Date               = today,
                                        CardNum            = _card.Card.CardNum,
                                        ChargeCrushLogType = Models.ChargeCrushLogType.Open,
                                        Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                    });
                                }

                                //if (status_sign)
                                //{
                                //    if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), false))
                                //    {
                                //        _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                //        {
                                //            Date = today,
                                //            CardNum = _card.Card.CardNum,
                                //            ChargeCrushLogType = Models.ChargeCrushLogType.EntitlementClose,
                                //            Text = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                //        });
                                //    }

                                //    System.Threading.Thread.Sleep(2000);
                                //    if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), true))
                                //    {
                                //        _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                //        {
                                //            Date = today,
                                //            CardNum = _card.Card.CardNum,
                                //            ChargeCrushLogType = Models.ChargeCrushLogType.EntitlementOpen,
                                //            Text = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                //        });
                                //    }
                                //}
                            }
                        }
                        _db.SaveChanges();

                        //montaged c
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.FreeDays))
                        {
                            bool is_open = true;
                            if (_card.Card.Tdate.AddDays(free_days) < today)
                            {
                                decimal balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                double  amount  = _card.SubscribAmount - (_card.SubscribAmount * (double)_card.Card.Discount / 100);
                                if ((double)balance >= amount || _card.IsBudget || _card.CustomerType == CustomerType.Technic)
                                {
                                    _card.Card.CardStatus = CardStatus.Active;
                                    _db.CardLogs.Add(new CardLog()
                                    {
                                        CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Open, UserId = 1
                                    });
                                    _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                    Utils.Utils.SetFinishDate(_db, jurid_limit_months, _card.Card.Id);

                                    //original code
                                    //if (!_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), true, DateTime.Now))
                                    //{

                                    //}
                                }
                                else
                                {
                                    is_open = false;
                                    _card.Card.CardStatus       = CardStatus.Closed;
                                    _card.Card.CloseDate        = today;
                                    _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                    _db.CardLogs.Add(new CardLog()
                                    {
                                        CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                    });
                                }

                                if (is_open)
                                {
                                    if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.Now.AddHours(-4), _card.Card.FinishDate.AddHours(-4), true))
                                    {
                                        //throw new Exception("ბარათი ვერ გააქტიურდა:" + _card.Card.CardNum);
                                        _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                        {
                                            Date               = today,
                                            CardNum            = _card.Card.CardNum,
                                            ChargeCrushLogType = is_open ? ChargeCrushLogType.EntitlementOpen : ChargeCrushLogType.EntitlementClose,
                                            Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                        });
                                    }

                                    //if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), false))
                                    //{
                                    //    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                    //    {
                                    //        Date = today,
                                    //        CardNum = _card.Card.CardNum,
                                    //        ChargeCrushLogType = is_open ? ChargeCrushLogType.EntitlementOpen : ChargeCrushLogType.EntitlementClose,
                                    //        Text = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                    //    });
                                    //}
                                }
                            }
                            else
                            {
                                foreach (var c_s in _card.CardServices)
                                {
                                    if (c_s.IsActive || Utils.Utils.GetServiceBalance(_card.PaymentAmount, _card.ServiceAmount, _card.WithoutServiceAmount) < 0)
                                    {
                                        if (c_s.Date.AddDays(service_days).Date <= today.Date)
                                        {
                                            decimal balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                            if (c_s.IsActive)
                                            {
                                                CardCharge _charge = new CardCharge {
                                                    Tdate = today, CardId = _card.Card.Id, Status = CardChargeStatus.Service, Amount = c_s.Amount
                                                };
                                                balance -= _charge.Amount;
                                                _db.CardCharges.Add(_charge);

                                                c_s.IsActive         = false;
                                                _db.Entry(c_s).State = EntityState.Modified;
                                            }

                                            if (balance < 0)
                                            {
                                                _card.Card.CardStatus       = CardStatus.Blocked;
                                                _db.Entry(_card.Card).State = EntityState.Modified;

                                                _db.CardLogs.Add(new CardLog()
                                                {
                                                    CardId = _card.Card.Id, Date = today, Status = CardLogStatus.BlockToService, UserId = 1
                                                });

                                                if (!_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), false, DateTime.SpecifyKind(today, DateTimeKind.Utc)))
                                                {
                                                    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                                    {
                                                        Date               = today,
                                                        CardNum            = _card.Card.CardNum,
                                                        ChargeCrushLogType = ChargeCrushLogType.Block,
                                                        Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                                    });
                                                }
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        _db.SaveChanges();

                        //active cards
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Active))
                        {
                            bool has_s = false;
                            foreach (var c_s in _card.CardServices.Where(c => c.IsActive))
                            {
                                if (c_s.Date.AddDays(service_days).Date <= today.Date)
                                {
                                    _db.CardCharges.Add(new CardCharge {
                                        Tdate = today, CardId = _card.Card.Id, Status = CardChargeStatus.Service, Amount = c_s.Amount
                                    });

                                    c_s.IsActive         = false;
                                    _db.Entry(c_s).State = EntityState.Modified;
                                }
                                has_s = true;
                            }
                            _db.SaveChanges();

                            if (has_s)
                            {
                                Utils.Utils.SetFinishDate(_db, jurid_limit_months, _card.Card.Id);
                            }

                            if (_card.CustomerType != CustomerType.Juridical)
                            {
                                if (_card.Card.FinishDate <= today && _card.CustomerType != CustomerType.Technic) //&& _card.CustomerType != CustomerType.Technic
                                {
                                    RentAccrualsPresentation rentAccrualsPresentation = new RentAccrualsPresentation(_db);
                                    if (rentAccrualsPresentation.RentBalance(_card.Card.Id) >= rentAccrualsPresentation.RentDayAmount())
                                    {
                                        rentAccrualsPresentation.CardAccruals(_card);
                                        rentAccrualsPresentation.RentFinishDat(_card);
                                    }
                                    else
                                    {
                                        if (_card.SubscribAmount != 12)
                                        {
                                            _db.CardCharges.Add(new CardCharge()
                                            {
                                                CardId = _card.Card.Id, Amount = Math.Round((decimal)0.10, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                            });
                                        }
                                        _card.Card.CardStatus       = CardStatus.Closed;
                                        _card.Card.CloseDate        = today;
                                        _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;

                                        foreach (var c_s in _card.CardServices.Where(c => c.IsActive))
                                        {
                                            if (c_s.Date.AddDays(service_days).Date > today.Date)
                                            {
                                                _db.CardCharges.Add(new CardCharge {
                                                    Tdate = today, CardId = _card.Card.Id, Status = CardChargeStatus.Service, Amount = c_s.Amount
                                                });
                                                _db.CardLogs.Add(new CardLog()
                                                {
                                                    CardId = _card.Card.Id, Date = today, Status = CardLogStatus.CloseToService, UserId = 1
                                                });

                                                c_s.IsActive         = false;
                                                _db.Entry(c_s).State = EntityState.Modified;
                                            }
                                        }

                                        _db.CardLogs.Add(new CardLog()
                                        {
                                            CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                        });

                                        //if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), _card.Card.FinishDate.AddHours(-4), _card.Card.FinishDate.AddHours(-4), true))
                                        ////if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), false))
                                        //{
                                        //    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                        //    {
                                        //        Date = today,
                                        //        CardNum = _card.Card.CardNum,
                                        //        ChargeCrushLogType = ChargeCrushLogType.EntitlementClose,
                                        //        Text = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                        //    });
                                        //}
                                    }
                                }

                                if (_card.Card.CardStatus == CardStatus.Active && _card.CustomerType != CustomerType.Technic)  //&& _card.CustomerType != CustomerType.Technic
                                {
                                    //original code
                                    //decimal amount = (decimal)(_card.SubscribAmount / coeff);

                                    decimal amount = (decimal)(_card.SubscribAmount / coeff / Utils.Utils.divide_card_charge_interval);

                                    amount -= (amount * (decimal)_card.Card.Discount / 100);
                                    if (amount <= 0)
                                    {
                                        continue;
                                    }
                                    _db.CardCharges.Add(new CardCharge()
                                    {
                                        CardId = _card.Card.Id, Amount = amount, Tdate = today, Status = CardChargeStatus.Daily
                                    });
                                }
                            }
                            else
                            {
                                bool   has_inough = false;
                                int    pay_count  = _db.Payments.Where(p => p.CardId == _card.Card.Id).Count();
                                double min_price  = pay_count == 1 ? _card.SubscribAmount : _card.MinPrice;
                                min_price -= (min_price * (double)_card.Card.Discount / 100);

                                decimal  balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                DateTime _dt     = DateTime.Now;

                                if ((double)balance >= min_price)
                                {
                                    has_inough = true;
                                }

                                if (_dt.Day == 1)
                                {
                                    balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                    if (balance >= 0)
                                    {
                                        Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                    }
                                }

                                int diff_days = (_card.Card.FinishDate - _dt).Days;

                                if (_dt.Day > 1 && _dt.Day < 10 /*6*/)
                                {
                                    if (diff_days < 25)
                                    {
                                        balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                        if (balance >= 0)
                                        {
                                            Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                        }
                                    }
                                }

                                if (_dt.Day == 10 /*6*/)
                                {
                                    if (diff_days < 25)
                                    {
                                        DateTime f_datefrom         = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1, 0, 0, 0);
                                        DateTime f_dateto           = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 10, 0, 0, 0);
                                        var      CardCahrge_Balance = _db.CardCharges.Where(c => c.CardId == _card.Card.Id && c.Tdate >= f_datefrom && c.Tdate <= f_dateto).Select(s => s.Amount).Sum();
                                        balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                        balance = balance + CardCahrge_Balance;
                                        if (balance >= 0)
                                        {
                                            Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                        }
                                        else
                                        {
                                            RentAccrualsPresentation rentAccrualsPresentation = new RentAccrualsPresentation(_db); // ijara daricxva qartuli arxebi
                                            if (rentAccrualsPresentation.RentBalance(_card.Card.Id) >= rentAccrualsPresentation.RentDayAmount())
                                            {
                                                rentAccrualsPresentation.CardAccruals(_card);
                                                rentAccrualsPresentation.RentFinishDat(_card);
                                            }
                                            else
                                            {
                                                if (_card.SubscribAmount != 12)
                                                {
                                                    _db.CardCharges.Add(new CardCharge()
                                                    {
                                                        CardId = _card.Card.Id, Amount = Math.Round((decimal)0.10, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                                    });
                                                }
                                                _card.Card.CardStatus       = CardStatus.Closed;
                                                _card.Card.CloseDate        = today;
                                                _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                                _db.CardLogs.Add(new CardLog()
                                                {
                                                    CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                                });
                                            }
                                        }
                                    }
                                }

                                if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), _card.Card.CloseDate.AddHours(-4), _card.Card.FinishDate.AddHours(-4), true))
                                //if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), false))
                                {
                                    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                    {
                                        Date               = today,
                                        CardNum            = _card.Card.CardNum,
                                        ChargeCrushLogType = ChargeCrushLogType.EntitlementClose,
                                        Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                    });
                                }
                                //miniSMS
                                sendMiniSMS.SaveMiniSMSData(Convert.ToInt32(_card.Card.CardNum), _card.Card.Id, _card.CasIds.ToArray(), _card.Card.CloseDate.AddHours(-4), _card.Card.FinishDate.AddHours(-4), (int)CardStatus.Active, true, (int)StatusMiniSMS.Charges);

                                if (_card.Card.CardStatus == CardStatus.Active && _card.CustomerType != CustomerType.Technic)  //&& _card.CustomerType != CustomerType.Technic
                                {
                                    //original code
                                    //decimal amount = (decimal)(_card.SubscribAmount / coeff);

                                    decimal amount = (decimal)(_card.SubscribAmount / coeff / Utils.Utils.divide_card_charge_interval);

                                    amount -= (amount * (decimal)_card.Card.Discount / 100);
                                    if (amount <= 0)
                                    {
                                        continue;
                                    }
                                    _db.CardCharges.Add(new CardCharge()
                                    {
                                        CardId = _card.Card.Id, Amount = amount, Tdate = today, Status = CardChargeStatus.Daily
                                    });
                                }
                            }

                            //if (has_s)
                            //{
                            //    Utils.Utils.SetFinishDate(_db, jurid_limit_months, _card.Card.Id);
                            //}
                        }
                        _db.SaveChanges();

                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Blocked))
                        {
                            Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp = _db.SubscriptionPackages.Include("Package").Where(s => s.SubscriptionId == sb.Id).ToList();
                            //Package package = _db.Packages.Where(p => p.Id == sbp.PackageId).First();

                            //if (_card.CustomerType != CustomerType.Juridical)
                            {
                                if (sbp.Any(p => p.Package.RentType == RentType.rent))
                                {
                                    _db.CardCharges.Add(new CardCharge()
                                    {
                                        CardId = _card.Card.Id, Amount = Math.Round((decimal)0.10, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                    });
                                }
                            }
                        }
                        _db.SaveChanges();

                        _socket.Disconnect();
                        tran.Commit();
                        Task.Run(async() => { await Utils.Utils.sendMessage(_db.Customers.Where(c => c.Code == "01025019391").FirstOrDefault().Phone1, "daricxva - " + DateTime.Now.ToString()); }).Wait();
                        Task.Run(async() => { await Utils.Utils.sendMessage("598733767", "daricxva - " + DateTime.Now.ToString()); }).Wait();
                        Task.Run(async() => { await Utils.Utils.sendMessage("593668668", "daricxva - " + DateTime.Now.ToString()); }).Wait();
                        //Utils.Utils.OnSendAutorizeSMS("599610949", "shesrulda", _params.First(p => p.Name == "SMSUsername").Value, _params.First(p => p.Name == "SMSPassword").Value);
                        //Utils.Utils.OnSendAutorizeSMS("598894533", "shesrulda", _params.First(p => p.Name == "SMSUsername").Value, _params.First(p => p.Name == "SMSPassword").Value);
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        Utils.Utils.ErrorLogging(ex, @"C:\DigitalTV\ChargeCardLog.txt");
                        File.AppendAllText(@"C:\DigitalTV\log.txt", "\r\n" + (ex.Message != null?ex.Message:"null") + "\r\n");
                        File.AppendAllText(@"C:\DigitalTV\log.txt", (ex.InnerException != null ? ex.InnerException.Message : "null") + "\r\n");
                        File.AppendAllText(@"C:\DigitalTV\log.txt", (ex.InnerException != null && ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "null") + ": Rollback at - " + DateTime.Now.ToString() + "\r\n");
                        File.AppendAllText(@"C:\DigitalTV\log.txt", "\r\n" + (ex.StackTrace != null ? ex.StackTrace : "null") + "\r\n");
                        using (DataContext _db_log = new DataContext())
                        {
                            _db_log.ChargeCrushLogs.Add(new ChargeCrushLog
                            {
                                Date               = DateTime.Now,
                                CardNum            = "",
                                ChargeCrushLogType = ChargeCrushLogType.Crush,
                                Text               = (ex.Message != null ? ex.Message : "null")
                            });
                            _db_log.SaveChanges();
                        }
                    }
                }

                File.AppendAllText(@"C:\DigitalTV\log.txt", "\r\n end: " + DateTime.Now.ToString() + "\r\n");
            }
        }
Exemplo n.º 11
0
        public void Execute(IJobExecutionContext context)
        {
            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 6000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        string          sql          = @"SELECT cr.card_id FROM [dbo].[PromoCahngePack] AS cr where DATEDIFF(day, '" + DateTime.Now + "', cr.tdate)=0";
                        List <Param>    Params       = _db.Params.ToList();
                        string[]        address      = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                        string          username     = Params.First(p => p.Name == "SMSPassword").Value;
                        string          password     = Params.First(p => p.Name == "SMSUsername").Value;
                        int             osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value);
                        List <Card>     cards;
                        string          messageText = "";
                        MessageTemplate message     = new MessageTemplate(); // = _db.AutoMessageTemplates.Where(m => m.Name == "ReportDisabling").FirstOrDefault();
                        MessageTemplate message_geo;                         // = _db.AutoMessageTemplates.Where(m => m.Name == "ReportDisabling_GEO").FirstOrDefault();

                        int[] ids = _db.Database.SqlQuery <int>(sql).ToArray();

                        cards = _db.Cards.Where(c => ids.Contains(c.Id)).Where(c => c.Customer.Type != CustomerType.Technic).ToList();

                        foreach (Card card in cards)
                        {
                            Subscribtion curr_sb                  = _db.Subscribtions.Where(s => s.CardId == card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp        = _db.SubscriptionPackages.Where(s => s.SubscriptionId == curr_sb.Id).ToList();
                            List <Package>             curr_packs = new List <Package>();
                            foreach (var sbs in sbp)
                            {
                                List <Package> package = _db.Packages.Where(p => p.Id == sbs.PackageId).ToList();

                                if (package.Any(p => p.Id == 304086))
                                {
                                    if (card.CardStatus == CardStatus.Closed)
                                    {
                                        CardDetailData _cardt = _db.Cards.Where(c => c.Id == card.Id).Select(c => new CardDetailData
                                        {
                                            PaymentAmount  = c.Payments.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                            ChargeAmount   = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                            Card           = c,
                                            IsBudget       = c.Customer.IsBudget,
                                            CustomerType   = c.Customer.Type,
                                            SubscribAmount = c.Subscribtions.Where(s => s.Status).FirstOrDefault().Amount,
                                            CasIds         = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId),
                                            MinPrice       = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice),
                                            CardLogs       = c.CardLogs.ToList()
                                        }).FirstOrDefault();

                                        double balance = Math.Round((double)Utils.Utils.GetBalance(_cardt.PaymentAmount, _cardt.ChargeAmount), 2);
                                        if (balance <= 0)
                                        {
                                            balance = balance - package.FirstOrDefault().MinPrice;
                                        }
                                        if (balance > 0 && balance < package.FirstOrDefault().MinPrice)
                                        {
                                            balance = package.FirstOrDefault().MinPrice - balance;
                                        }
                                        message     = _db.MessageTemplates.Where(m => m.Name == "Promo_Change_Active8_false").FirstOrDefault();
                                        messageText = String.Format(message.Desc, balance);
                                        string phoneto = _db.Customers.Where(cs => cs.Id == card.CustomerId).Select(cu => cu.Phone1).FirstOrDefault();
                                        Task.Run(async() => { await Utils.Utils.sendMessage(phoneto, messageText); }).Wait();
                                        _db.MessageLoggings.Add(new MessageLogging()
                                        {
                                            card_id    = card.Id,
                                            tdate      = DateTime.Now,
                                            status     = MessageLoggingStatus.PromoCahngeActive8,
                                            message_id = message.Id
                                        });
                                        _db.SaveChanges();
                                    }
                                    if (card.CardStatus == CardStatus.Active)
                                    {
                                        message     = _db.MessageTemplates.Where(m => m.Name == "Promo_Change_Active8").FirstOrDefault();
                                        messageText = String.Format(message.Desc, card.FinishDate);

                                        string phonetos = _db.Customers.Where(cs => cs.Id == card.CustomerId).Select(cu => cu.Phone1).FirstOrDefault();
                                        Task.Run(async() => { await Utils.Utils.sendMessage(phonetos, messageText); }).Wait();
                                        _db.MessageLoggings.Add(new MessageLogging()
                                        {
                                            card_id    = card.Id,
                                            tdate      = DateTime.Now,
                                            status     = MessageLoggingStatus.PromoCahngeClosed8,
                                            message_id = message.Id
                                        });
                                        _db.SaveChanges();

                                        SendOSDRequesSMS sendOSDReques = new SendOSDRequesSMS();
                                        sendOSDReques.SendOSD(card.CardNum, String.Format(_db.MessageTemplates.Where(m => m.Name == "Promo_Change_Active8_Geo").FirstOrDefault().Desc, card.FinishDate.ToString("dd/MM/yyyy")), _db.Params.ToList());
                                        //message_geo = _db.MessageTemplates.Where(m => m.Name == "OnShare8Active_GEO").FirstOrDefault();
                                    }
                                }
                            }
                        }
                        Task.Run(async() => { await Utils.Utils.sendMessage("598733767", "დამთავრდა სმს გაგზავნა პრომოსთვის" + ""); }).Wait();
                    }
                    catch
                    {
                    }
                }
            }
        }
Exemplo n.º 12
0
 public virtual IGameListSubscription AddSubscription(PeerBase peer, Hashtable gamePropertyFilter, int maxGameCount)
 {
     var subscribtion = new Subscribtion(this, maxGameCount);
     this.peers.Add(peer);
     return subscribtion;
 }
Exemplo n.º 13
0
        private string saveInvoice(out int invoiceN)
        {
            using (ClubDBEntities club = new ClubDBEntities())
            {
                // get info
                int     clientID = Convert.ToInt32(tbFile.Text);
                decimal total    = Convert.ToDecimal(tbTotal.Text);
                int     dis      = (string.IsNullOrEmpty(tbDis.Text)) ? 0 : Convert.ToInt32(tbDis.Text);
                decimal final    = Convert.ToDecimal(tbFinal.Text);
                decimal rem      = (string.IsNullOrEmpty(tbRemain.Text)) ? 0 : Convert.ToDecimal(tbRemain.Text);
                //int dep = Convert.ToInt32(ddlDep.SelectedValue);
                InvoiceHeader inv = new InvoiceHeader();
                inv.ClientID    = clientID;
                inv.TotalAmount = total;
                inv.Discount    = dis;
                inv.FinalAmount = final;
                //inv.Dep = dep;
                inv.Notes = tbNotes.Text;
                inv.Type  = rbType.SelectedValue;
                //inv.DocID = Convert.ToInt32(ddlDoc.SelectedValue);
                string userName = User.Identity.Name;
                inv.Status = InvoiceStatus.Complete.ToString();

                inv.RecepName = userName;
                inv.Date      = Convert.ToDateTime(tbDate.Text);//DateTime.Now.Date;// TODO: chnage this

                // services

                club.InvoiceHeaders.AddObject(inv);
                club.SaveChanges();
                invoiceN = inv.InvID;
                var services = (from o in club.Services
                                where ids.Contains(o.ServiceID)
                                select o).ToList();
                foreach (var s in services)
                {
                    // create  a sub if sub
                    if (s.Sub)
                    {
                        Subscribtion sub = new Subscribtion();
                        sub.ClientID  = clientID;
                        sub.Date      = Convert.ToDateTime(tbDate.Text);
                        sub.ServiceID = s.ServiceID;
                        sub.AttDays   = 0;
                        sub.LeftDays  = s.TotalDays;
                        sub.SubDays   = s.TotalDays;
                        club.Subscribtions.AddObject(sub);
                        club.SaveChanges();
                        switch (s.DepID)
                        {
                        case 1:
                            NutSub nut = new NutSub();
                            nut.SubID = sub.SubID;
                            club.NutSubs.AddObject(nut);
                            club.SaveChanges();
                            break;

                        case 2:
                            IntSub Int = new IntSub();
                            Int.SubID = sub.SubID;
                            club.IntSubs.AddObject(Int);
                            club.SaveChanges();
                            break;
                        }
                    }
                    // create a service
                    InvoiceService ser = new InvoiceService();
                    ser.InvID     = inv.InvID;
                    ser.ServiceID = s.ServiceID;
                    if (dis == 0)
                    {
                        if (rbType.SelectedIndex == 1)
                        {
                            decimal paid = Convert.ToDecimal(string.IsNullOrEmpty(tbPaid.Text) ? "0" : tbPaid.Text);
                            ser.PaidAmount  = getPrecentage(s.Price, final, paid);
                            ser.AskedAmount = s.Price;
                            ser.Percentage  = s.Price / final;
                        }

                        else
                        {
                            ser.PaidAmount  = s.Price;
                            ser.AskedAmount = s.Price;
                            ser.Percentage  = s.Price / final;
                        }
                    }
                    else
                    {
                        if (rbType.SelectedIndex == 1)
                        {
                            decimal paid    = Convert.ToDecimal(string.IsNullOrEmpty(tbPaid.Text) ? "0" : tbPaid.Text);
                            decimal asked   = applyDis(dis, s.Price);
                            decimal serpaid = getPrecentage(s.Price, final, paid);
                            ser.AskedAmount = asked;
                            ser.PaidAmount  = serpaid;
                            ser.Percentage  = s.Price / final;
                        }
                        else
                        {
                            decimal asked = applyDis(dis, s.Price);
                            ser.AskedAmount = asked;
                            ser.PaidAmount  = asked;
                            ser.Percentage  = s.Price / final;
                            //decimal paid = getPrecentage(asked, final, final);
                        }
                    }

                    club.InvoiceServices.AddObject(ser);
                }
                Deposit deposit = new Deposit();
                deposit.InvID      = invoiceN;
                deposit.Notes      = tbNotes.Text;
                deposit.Date       = Convert.ToDateTime(tbDate.Text);//DateTime.Now.Date;// TODO: chnage this
                deposit.Employee   = club.Employees.Where(a => a.UserName == User.Identity.Name).Select(o => o.Name).First();
                deposit.FromPerson = club.Clients.Where(a => a.ClientID == inv.ClientID).First().FullName();
                switch (rbType.SelectedIndex)
                {
                case 0:
                    deposit.CheckNum = Convert.ToInt64(tbCheck.Text);
                    deposit.Bank     = tbBank.Text;
                    inv.Type         = InvoiceType.Check.ToString();
                    break;

                case 1:
                    decimal paid = Convert.ToDecimal(tbPaid.Text);
                    deposit.Amount = paid;
                    inv.Type       = InvoiceType.Credit.ToString();
                    break;

                case 2:
                    decimal amount = Convert.ToDecimal(tbFinal.Text);
                    deposit.Amount = amount;
                    inv.Type       = InvoiceType.Cash.ToString();
                    break;
                }
                club.Deposits.AddObject(deposit);
                club.SaveChanges();
                VoucherID = deposit.ID;
                return(inv.Status);
            }
        }
Exemplo n.º 14
0
        public void Execute(IJobExecutionContext context)
        {
            DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0);

            using (DataContext _db = new DataContext())
            {
                decimal   jurid_limit_months = int.Parse(_db.Params.First(c => c.Name == "JuridLimitMonths").Value);
                string[]  address            = _db.Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                CASSocket _socket            = new CASSocket()
                {
                    IP = address[0], Port = int.Parse(address[1])
                };
                _socket.Connect();

                _db.Database.CommandTimeout = 6000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        List <AutoSubscribChangeCard> _subscribs = _db.AutoSubscribChangeCards.Include("Card").Where(c => today.Day >= c.SendDate.Value.Day && today.Month == c.SendDate.Value.Month && today.Year == c.SendDate.Value.Year).ToList();//.Where(c => c.SendDate.HasValue ? DbFunctions.DiffDays(today, c.SendDate.Value) == 0 : DbFunctions.DiffDays(today, c.Card.FinishDate) < 1).ToList();
                        foreach (AutoSubscribChangeCard _subscrib in _subscribs)
                        {
                            int          service_days = Convert.ToInt32(_db.Params.First(p => p.Name == "ServiceDays").Value);
                            List <Param> _params      = _db.Params.ToList();
                            string       charge_time  = _params.Where(p => p.Name == "CardCharge").First().Value;
                            int          free_days    = Convert.ToInt32(_params.Where(p => p.Name == "FreeDays").Select(p => p.Value).First());
                            //Card card = _db.Cards.Where(c => c.Id == _subscrib.CardId).First();
                            //original line
                            //card.FinishDate = Utils.Utils.GenerateFinishDate(card.Tdate, charge_time).AddDays(free_days);

                            SendMiniSMS sendMiniSMS = new SendMiniSMS();

                            short[] casIds     = _subscrib.CasIds.Split(',').Select(c => short.Parse(c)).ToArray();
                            short[] old_casIds = { };

                            Subscribtion updSubscrbs = _db.Subscribtions.Include("SubscriptionPackages.Package").Where(s => s.CardId == _subscrib.CardId).OrderByDescending(s => s.Tdate).FirstOrDefault();
                            if (updSubscrbs.SubscriptionPackages.Where(s => s.PackageId == 304071).FirstOrDefault() == null)
                            {
                                if (updSubscrbs != null)
                                {
                                    updSubscrbs.Status           = false;
                                    _db.Entry(updSubscrbs).State = System.Data.Entity.EntityState.Modified;

                                    old_casIds = updSubscrbs.SubscriptionPackages.Select(c => (short)c.Package.CasId).ToArray();
                                }
                                _db.SaveChanges();

                                Subscribtion _new_sub = new Subscribtion()
                                {
                                    Amount = _subscrib.Amount,
                                    CardId = _subscrib.CardId,
                                    Status = true,
                                    Tdate  = DateTime.Now,
                                    UserId = 1 /*_subscrib.UserId*/,
                                    SubscriptionPackages = _subscrib.PackageIds.Split(',').Select(s => new SubscriptionPackage {
                                        PackageId = int.Parse(s)
                                    }).ToList()
                                };
                                _db.Subscribtions.Add(_new_sub);
                                _db.SaveChanges();
                                //if (!_socket.SendEntitlementRequest(int.Parse(_subscrib.Card.CardNum), old_casIds, DateTime.SpecifyKind(_subscrib.Card.CasDate, DateTimeKind.Utc), false))
                                //{
                                //    throw new Exception("ბარათის პაკეტები ვერ შაიშალა:" + _subscrib.Card.CardNum);
                                //}

                                if (!_socket.SendEntitlementRequest(Convert.ToInt32(_subscrib.Card.CardNum), old_casIds, _subscrib.Card.FinishDate.AddHours(-4), _subscrib.Card.FinishDate.AddHours(-4), false))
                                //if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.SpecifyKind(_card.Card.CasDate, DateTimeKind.Utc), true))
                                {
                                    throw new Exception("ბარათის პაკეტები ვერ წაიშალა:" + _subscrib.Card.CardNum);
                                }
                                sendMiniSMS.SaveMiniSMSData(Convert.ToInt32(_subscrib.Card.CardNum), _subscrib.Card.Id, old_casIds, _subscrib.Card.FinishDate.AddHours(-4), _subscrib.Card.FinishDate.AddHours(-4), (int)-2, false, (int)StatusMiniSMS.AutoPackages);
                                //_subscrib.Card.CasDate = DateTime.Now;
                                //_db.Entry(_subscrib.Card).State = EntityState.Modified;
                                //_db.SaveChanges();

                                AddLoging(_db, LogType.CardPackage, LogMode.Add, 1 /*_subscrib.UserId*/, _subscrib.CardId, "ავტომატური პაკეტის მიბმა ბარათზე:" + _subscrib.Card.AbonentNum, new List <LoggingData>());

                                //nonoriginal line
                                _db.Entry(_subscrib.Card).State = EntityState.Modified;
                                _db.SaveChanges();

                                //_db.SaveChanges();
                                //Utils.Utils.SetFinishDate(_db, decimal.Parse(_db.Params.First(c => c.Name == "JuridLimitMonths").Value), _subscrib.CardId);

                                var card = _db.Cards.Where(c => c.Id == _subscrib.CardId).Include("Customer").Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData
                                {
                                    PaymentAmount  = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0,
                                    ChargeAmount   = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                    Card           = c,
                                    CustomerType   = c.Customer.Type,
                                    IsBudget       = c.Customer.IsBudget,
                                    SubscribAmount = c.Subscribtions.Where(s => s.Status).FirstOrDefault().Amount,
                                    MinPrice       = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice),
                                    CasIds         = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId)
                                }).FirstOrDefault();

                                if (card != null)
                                {
                                    _db.AutoSubscribChangeCards.Remove(_subscrib);
                                    _db.Entry(_subscrib).State = EntityState.Deleted;
                                    _db.SaveChanges();

                                    if (_db.Customers.Where(c => c.Id == card.Card.CustomerId).Single().Type != CustomerType.Juridical && card.Card.CardStatus != CardStatus.Paused)
                                    {
                                        card.Card.CasDate          = DateTime.Now;
                                        _db.Entry(card.Card).State = EntityState.Modified;
                                        _db.SaveChanges();

                                        decimal balance      = Utils.Utils.GetBalance(card.PaymentAmount, card.ChargeAmount);
                                        decimal amount       = (decimal)card.SubscribAmount;
                                        decimal _amount_coef = amount / service_days;
                                        if (balance >= _amount_coef)
                                        {
                                            Utils.Utils.SetFinishDate(_db, jurid_limit_months, card.Card.Id);

                                            card.Card.CardStatus       = CardStatus.Active;
                                            _db.Entry(card.Card).State = EntityState.Modified;
                                            //_db.CardLogs.Add(new CardLog() { CardId = card.Card.Id, Date = today, Status = CardLogStatus.Open, UserId = 1 });
                                            _db.SaveChanges();

                                            //if (!_socket.SendEntitlementRequest(int.Parse(_subscrib.Card.CardNum), casIds, DateTime.SpecifyKind(_subscrib.Card.CasDate, DateTimeKind.Utc), true))
                                            if (!_socket.SendEntitlementRequest(int.Parse(card.Card.CardNum), casIds, card.Card.CloseDate.AddHours(-4), card.Card.FinishDate.AddHours(-4), true))
                                            {
                                                throw new Exception("ბარათის პაკეტები ვერ გააქტიურდა:" + card.Card.CardNum);
                                            }
                                            sendMiniSMS.SaveMiniSMSData(Convert.ToInt32(card.Card.CardNum), card.Card.Id, card.CasIds.ToArray(), card.Card.CloseDate.AddHours(-4), card.Card.FinishDate.AddHours(-4), (int)-2, true, (int)StatusMiniSMS.AutoPackages);
                                        }
                                        else
                                        {
                                            card.Card.CardStatus = CardStatus.Closed;
                                            card.Card.CloseDate  = DateTime.Now;
                                            //card.Card.FinishDate = DateTime.Now;
                                            _db.Entry(card.Card).State = EntityState.Modified;
                                            _db.CardLogs.Add(new CardLog()
                                            {
                                                CardId = card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                            });
                                            _db.SaveChanges();
                                        }
                                    }
                                }
                            }

                            else
                            {
                                _db.AutoSubscribChangeCards.Remove(_subscrib);
                                _db.Entry(_subscrib).State = EntityState.Deleted;
                                _db.SaveChanges();
                            }
                        }
                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        Utils.Utils.ErrorLogging(ex, @"C:\DigitalTV\AutoSubscribLog.txt");
                    }
                }

                _socket.Disconnect();
            }
        }
Exemplo n.º 15
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (edit)
            {
                using (ClubDBEntities club = new ClubDBEntities())
                {
                    var result = (from o in club.Subscribtions
                                  where o.SubID == sub.SubID
                                  select o).First();
                    result.Measurements = tbMeasurements.Text;
                    result.Diagnosis    = tbDiagnosis.Text;
                    switch (sub.Service.DepID)
                    {
                    case 1:
                        var nut = (from o in club.NutSubs
                                   where o.SubID == sub.SubID
                                   select o).First();
                        nut.Weight = tbWeight.Text;
                        nut.Hight  = tbHieght.Text;
                        nut.Fat    = tbFat.Text;
                        club.SaveChanges();
                        break;

                    case 2:
                        var iint = (from o in club.IntSubs
                                    where o.SubID == sub.SubID
                                    select o).First();
                        iint.BloodSugar    = tbBSugar.Text;
                        iint.BloodPressure = tbBPressure.Text;
                        club.SaveChanges();
                        break;

                    case 5:
                        club.SaveChanges();
                        break;
                    }
                }
                string Message = "تم حفظ التعديلات";
                ScriptManager.RegisterStartupScript(Page, this.GetType(), "alert", string.Format("alert('{0}');", Message), true);
            }
            else
            {
                lblError.Visible = false;
                int id      = Convert.ToInt32(tbFile.Text);
                int empID   = Convert.ToInt32(ddlDoc.SelectedValue);
                int service = Convert.ToInt32(ddlServices.SelectedValue);
                if (ddlDep.SelectedIndex != 0)
                {
                    int subId;
                    using (ClubDBEntities club = new ClubDBEntities())
                    {
                        var serviceDays = (from o in club.Services
                                           where o.ServiceID == service
                                           select o.TotalDays).First();
                        Subscribtion sub = new Subscribtion();
                        sub.ClientID  = id;
                        sub.Date      = DateTime.Now;
                        sub.LeftDays  = serviceDays;
                        sub.ServiceID = service;
                        sub.AttDays   = 0;
                        sub.SubDays   = serviceDays;
                        club.Subscribtions.AddObject(sub);
                        club.SaveChanges();
                        subId = sub.SubID;
                        switch (ddlDep.SelectedValue)
                        {
                        case "1":
                            sub.Diagnosis    = tbDiagnosis.Text;
                            sub.Measurements = tbMeasurements.Text;
                            NutSub nut = new NutSub();
                            nut.Fat    = tbFat.Text;
                            nut.Weight = tbWeight.Text;
                            nut.Hight  = tbHieght.Text;
                            nut.SubID  = subId;
                            club.NutSubs.AddObject(nut);
                            club.SaveChanges();
                            break;

                        case "2":
                            sub.Diagnosis    = tbDiagnosis.Text;
                            sub.Measurements = tbMeasurements.Text;
                            IntSub Int = new IntSub();
                            Int.BloodPressure = tbBPressure.Text;
                            Int.BloodSugar    = tbBSugar.Text;
                            club.IntSubs.AddObject(Int);
                            club.SaveChanges();
                            break;

                        case "5":
                            sub.Diagnosis    = tbDiagnosis.Text;
                            sub.Measurements = tbMeasurements.Text;
                            club.SaveChanges();
                            break;
                        }
                    }
                    // redirect to the invoice
                    Response.Redirect("Invoice.aspx?subID=" + subId + "&empID=" + empID);
                }
                else
                {
                    lblError.Text    = "الرجاء اختيار القسم";
                    lblError.Visible = true;
                }
            }
        }
Exemplo n.º 16
0
        public void Execute(IJobExecutionContext context)
        {
            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 6000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        int limit_days            = 60;
                        int message_interval_days = 7;
                        //SELECT DATEDIFF(minute, GETDATE(), '2006-01-01 00:00:00.0000000');
                        //string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id WHERE cr.status=0 AND DATEDIFF(day,Convert(varchar(10), getdate(), 126)+' 23:59:0.000',cr.finish_date)=2";
                        string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id where DATEDIFF(second, GETDATE(), cr.finish_date)<0 AND DATEDIFF(second, GETDATE(), cr.finish_date)>-120";
                        //string sql = @"SELECT cr.id FROM book.Cards as cr WHERE cr.card_num = '38067026'";

                        List <Param> Params       = _db.Params.ToList();
                        string[]     address      = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                        string       username     = Params.First(p => p.Name == "SMSPassword").Value;
                        string       password     = Params.First(p => p.Name == "SMSUsername").Value;
                        int          osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value);
                        //List<Card> cards;
                        MessageTemplate message     = _db.MessageTemplates.Where(m => m.Name == "RentLateMessage").FirstOrDefault();
                        MessageTemplate message_geo = _db.MessageTemplates.Where(m => m.Name == "RentLateMessage_GEO").FirstOrDefault();

                        int[] ids = _db.Database.SqlQuery <int>(sql).ToArray();

                        //cards = _db.Cards.Include("Customer")//.Include("Receiver").Include("Tower")
                        //                            .Where(c => c.CardStatus == CardStatus.Active && c.Customer.Type != CustomerType.Technic)
                        //                            .Where(c => ids.Contains(c.Id))
                        //                            .Select(c => c).ToList();

                        var cards = _db.Cards.Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData
                        {
                            CustomerType         = c.Customer.Type,
                            IsBudget             = c.Customer.IsBudget,
                            SubscribAmount       = c.Subscribtions.FirstOrDefault(s => s.Status).Amount,
                            CasIds               = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId),
                            PaymentAmount        = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0,
                            ChargeAmount         = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            Card                 = c,
                            MinPrice             = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice),
                            ServiceAmount        = c.CardCharges.Where(s => s.Status == CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            WithoutServiceAmount = c.CardCharges.Where(s => s.Status != CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            CardServices         = c.CardServices.ToList()
                        }).ToList();

                        foreach (CardDetailData _card in cards.Where(c => c.Card.CardStatus == CardStatus.Closed))
                        {
                            Subscribtion        sb      = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id).First();
                            SubscriptionPackage sbp     = _db.SubscriptionPackages.Where(s => s.SubscriptionId == sb.Id).First();
                            Package             package = _db.Packages.Where(p => p.Id == sbp.PackageId).First();
                            string phone   = _db.Customers.Where(c => c.Id == _card.Card.CustomerId).First().Phone1;
                            double balance = Math.Round((double)Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount), 2);

                            if (package.RentType == RentType.rent)
                            {
                                if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days - 2)
                                {
                                    MessageTemplate before_block_message      = _db.MessageTemplates.Single(m => m.Name == "BeforeRentLateMessage");
                                    string          before_block_message_desc = String.Format(before_block_message.Desc, Math.Round(balance * -1 + _card.SubscribAmount, 2));
                                    Task.Run(async() => { await Utils.Utils.sendMessage(phone, before_block_message_desc); }).Wait();
                                }
                            }
                        }

                        foreach (CardDetailData _card in cards.Where(c => c.Card.CardStatus == CardStatus.Blocked))
                        {
                            Subscribtion        sb      = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id).First();
                            SubscriptionPackage sbp     = _db.SubscriptionPackages.Where(s => s.SubscriptionId == sb.Id).First();
                            Package             package = _db.Packages.Where(p => p.Id == sbp.PackageId).First();

                            string phone            = _db.Customers.Where(c => c.Id == _card.Card.CustomerId).First().Phone1;
                            string message_desc     = String.Format(message.Desc, _card.Card.CardNum);
                            string message_desc_geo = String.Format(message_geo.Desc, _card.Card.CardNum);


                            if (package.RentType == RentType.rent)
                            {
                                //if ((DateTime.Now - _card.Card.CloseDate).Days > 1)
                                {
                                    //if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days)
                                    //{
                                    //    MessageTemplate block_message = _db.MessageTemplates.Single(m => m.Name == "OnRentLateLimit");
                                    //    string block_message_desc = message.Desc; // String.Format(message.Desc, Math.Round((balance), 2));
                                    //    Task.Run(async () => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    //}

                                    if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1)
                                    {
                                        //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                                        //_socket.Connect();

                                        //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        //{
                                        //    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //    {
                                        //        CardId = _card.Card.Id,
                                        //        MessageId = message_geo.Id,
                                        //        MessageType = MessageType.OSD,
                                        //    });
                                        //}

                                        //_socket.Disconnect();

                                        //_db.SaveChanges();

                                        //Task.Run(async () => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();

                                        MessageTemplate block_message      = _db.MessageTemplates.Single(m => m.Name == "OnRentLateLimit");
                                        string          block_message_desc = block_message.Desc; // String.Format(message.Desc, Math.Round((balance), 2));
                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, block_message_desc); }).Wait();

                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    }
                                    if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days)
                                    {
                                        //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                                        //_socket.Connect();

                                        //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        //{
                                        //    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //    {
                                        //        CardId = _card.Card.Id,
                                        //        MessageId = message_geo.Id,
                                        //        MessageType = MessageType.OSD,
                                        //    });
                                        //}

                                        //_socket.Disconnect();

                                        //_db.SaveChanges();

                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    }
                                    if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 2)
                                    {
                                        //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                                        //_socket.Connect();

                                        //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        //{
                                        //    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //    {
                                        //        CardId = _card.Card.Id,
                                        //        MessageId = message_geo.Id,
                                        //        MessageType = MessageType.OSD,
                                        //    });
                                        //}

                                        //_socket.Disconnect();

                                        //_db.SaveChanges();

                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    }
                                    if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 3)
                                    {
                                        //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                                        //_socket.Connect();

                                        //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        //{
                                        //    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //    {
                                        //        CardId = _card.Card.Id,
                                        //        MessageId = message_geo.Id,
                                        //        MessageType = MessageType.OSD,
                                        //    });
                                        //}

                                        //_socket.Disconnect();

                                        //_db.SaveChanges();

                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    }
                                    if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 4)
                                    {
                                        //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                                        //_socket.Connect();

                                        //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        //{
                                        //    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                        //    {
                                        //        CardId = _card.Card.Id,
                                        //        MessageId = message_geo.Id,
                                        //        MessageType = MessageType.OSD,
                                        //    });
                                        //}

                                        //_socket.Disconnect();

                                        //_db.SaveChanges();

                                        Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait();
                                    }
                                }
                            }
                        }

                        //foreach (CardDetailData card in cards)
                        //{
                        //    CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) };
                        //    _socket.Connect();

                        //    if (!_socket.SendOSDRequest(int.Parse(card.Card.CardNum), message_geo.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                        //    {
                        //        _db.MessageNotSendLogs.Add(new MessageNotSendLog
                        //        {
                        //            CardId = card.Card.Id,
                        //            MessageId = message_geo.Id,
                        //            MessageType = MessageType.OSD,
                        //        });
                        //    }

                        //    _socket.Disconnect();

                        //    _db.SaveChanges();

                        //    //Task.Run(async () => { await Utils.Utils.sendMessage(card.Customer.Phone1, message.MessageText); }).Wait();
                        //}
                    }
                    catch
                    {
                        tran.Rollback();
                    }
                }
            }
        }
Exemplo n.º 17
0
        public void Execute(IJobExecutionContext context)
        {
            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 10000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        //get parameters
                        var      parameters                = _db.Params.ToList();
                        string[] charge_vals               = parameters.First(c => c.Name == "CardCharge").Value.Split(':');
                        string[] address                   = parameters.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                        int      closed_card_days          = int.Parse(parameters.First(c => c.Name == "ClosedCardDays").Value);
                        decimal  closed_daily_amount       = decimal.Parse(parameters.First(c => c.Name == "CloseCardDailyAmount").Value);
                        int      closed_daily_amount_limit = int.Parse(parameters.First(c => c.Name == "CloseCardDailyAmountLimit").Value);
                        decimal  jurid_limit_months        = decimal.Parse(parameters.First(c => c.Name == "JuridLimitMonths").Value);
                        int      service_days              = int.Parse(parameters.First(c => c.Name == "ServiceDays").Value);
                        decimal  close_amount              = decimal.Parse(parameters.First(p => p.Name == "CloseCardAmount").Value);
                        int      free_days                 = Convert.ToInt32(parameters.First(p => p.Name == "FreeDays").Value);
                        int      block_card_days           = Convert.ToInt32(parameters.First(p => p.Name == "BlockCardDays").Value);
                        int?     closed_card_limit         = Convert.ToInt32(parameters.First(p => p.Name == "ClosedCardsLimit").Value);
                        int      jurid_pay_waiting_day     = Convert.ToInt32(parameters.First(p => p.Name == "JuridPayWaitingDay").Value);
                        decimal  rent_amount               = Convert.ToInt32(parameters.First(p => p.Name == "RentAmount").Value);
                        decimal  pen_daily_amount          = rent_amount / (decimal)service_days;
                        DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(charge_vals[0]), int.Parse(charge_vals[1]), 0);

                        CASSocket cas_socket = new CASSocket()
                        {
                            IP = address[0], Port = int.Parse(address[1])
                        };

                        var _cards = _db.Cards.Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData
                        {
                            CustomerType   = c.Customer.Type,
                            SubscribAmount = c.Subscribtions.FirstOrDefault(s => s.Status).Amount,
                            CasIds         = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId),
                            PaymentAmount  = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0,
                            ChargeAmount   = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                            Card           = c,
                            MinPrice       = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice)
                        }).ToList();

                        cas_socket.Connect();
                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Closed))
                        {
                            Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp = _db.SubscriptionPackages.Include("Package").Where(s => s.SubscriptionId == sb.Id).ToList();
                            {
                                if (sbp.Any(p => p.Package.RentType == RentType.rent))
                                {
                                    if ((today - _card.Card.CloseDate).Days <= closed_card_limit)
                                    {
                                        _db.CardCharges.Add(new CardCharge()
                                        {
                                            CardId = _card.Card.Id, Amount = Math.Round((decimal)pen_daily_amount, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                        });
                                    }
                                    else
                                    {
                                        if (!cas_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), false, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc)))
                                        {
                                            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                            {
                                                Date               = today,
                                                CardNum            = _card.Card.CardNum,
                                                ChargeCrushLogType = ChargeCrushLogType.Block,
                                                Text               = _card.Card.CardNum + ": ბარათი ვერ დაიბლოკა! Cas შეცდომის კოდი: " + cas_socket.error_code + " , Exeption Message: " + cas_socket.ErrorEx
                                            });
                                        }
                                        else
                                        {
                                            CardLog _log = new CardLog()
                                            {
                                                CardId = _card.Card.Id, Date = DateTime.Now, Status = CardLogStatus.Blocked, UserId = 1, CardStatus = _card.Card.CardStatus
                                            };
                                            _db.CardLogs.Add(_log);

                                            _card.Card.CardStatus       = CardStatus.Blocked;
                                            _db.Entry(_card.Card).State = EntityState.Modified;

                                            Logging _logging = new Logging
                                            {
                                                Tdate     = DateTime.Now,
                                                Type      = LogType.Card,
                                                UserId    = 1,
                                                Mode      = LogMode.CardDeal,
                                                TypeId    = _card.Card.Id,
                                                TypeValue = _card.Card.AbonentNum + " - ბარათი დაიბლოკა"
                                            };
                                            _db.Loggings.Add(_logging);
                                            _db.SaveChanges();

                                            _db.LoggingItems.AddRange(new List <LoggingData>()
                                            {
                                                new LoggingData {
                                                    field = "", new_val = "ბარათი დაიბლოკა", old_val = ""
                                                }
                                            }.Where(c => c.field != null).Select(c => new LoggingItem
                                            {
                                                LoggingId     = _logging.Id,
                                                ColumnDisplay = c.field.Replace(':', ' ').Trim(),
                                                NewValue      = c.new_val,
                                                OldValue      = c.old_val
                                            }));
                                        }
                                    }
                                }
                            }
                        }
                        _db.SaveChanges();

                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Paused))
                        {
                            if (_card.Card.PauseDate.AddDays(_card.Card.PauseDays) <= today)
                            {
                                bool status_sign = (_card.PaymentAmount - _card.ChargeAmount) >= (decimal)_card.MinPrice / 30m;

                                _card.Card.CardStatus = status_sign ? CardStatus.Active : CardStatus.Closed;
                                _card.Card.PauseDays  = 0;


                                CardLog _log = new CardLog();

                                if (_card.Card.CardStatus == CardStatus.Closed)
                                {
                                    _log.CardId = _card.Card.Id;
                                    _log.Date   = today;
                                    _log.Status = CardLogStatus.Close;
                                    _log.UserId = 1;

                                    _card.Card.CloseDate = today;
                                }
                                else if (_card.Card.CardStatus == CardStatus.Active)
                                {
                                    _log.CardId = _card.Card.Id;
                                    _log.Date   = today;
                                    _log.Status = CardLogStatus.Open;
                                    _log.UserId = 1;
                                }

                                _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                _db.CardLogs.Add(_log);

                                if (!cas_socket.SendCardStatus(Convert.ToInt32(_card.Card.CardNum), true, DateTime.SpecifyKind(today, DateTimeKind.Utc)))
                                {
                                    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                    {
                                        Date               = today,
                                        CardNum            = _card.Card.CardNum,
                                        ChargeCrushLogType = Models.ChargeCrushLogType.Open,
                                        Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                    });
                                }
                            }
                        }
                        _db.SaveChanges();


                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.FreeDays))
                        {
                            bool is_open = true;
                            if (_card.Card.Tdate.AddDays(free_days) < today)
                            {
                                decimal balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                double  amount  = _card.SubscribAmount - (_card.SubscribAmount * (double)_card.Card.Discount / 100);
                                if ((double)balance >= amount || _card.CustomerType == CustomerType.Technic)
                                {
                                    _card.Card.CardStatus = CardStatus.Active;
                                    _db.CardLogs.Add(new CardLog()
                                    {
                                        CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Open, UserId = 1
                                    });
                                    _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                    Utils.Utils.SetFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                }
                                else
                                {
                                    is_open = false;
                                    _card.Card.CardStatus       = CardStatus.Closed;
                                    _card.Card.CloseDate        = today;
                                    _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                    _db.CardLogs.Add(new CardLog()
                                    {
                                        CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                    });
                                }

                                if (is_open)
                                {
                                    if (!cas_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), DateTime.Now.AddHours(-4), _card.Card.FinishDate.AddHours(-4), true))
                                    {
                                        _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                        {
                                            Date               = today,
                                            CardNum            = _card.Card.CardNum,
                                            ChargeCrushLogType = is_open ? ChargeCrushLogType.EntitlementOpen : ChargeCrushLogType.EntitlementClose,
                                            Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                        });
                                    }
                                }
                            }
                        }
                        _db.SaveChanges();


                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Active))
                        {
                            if (_card.CustomerType != CustomerType.Juridical)
                            {
                                if (_card.Card.FinishDate <= today && _card.CustomerType != CustomerType.Technic)
                                {
                                    _card.Card.CardStatus       = CardStatus.Closed;
                                    _card.Card.CloseDate        = today;
                                    _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;

                                    _db.CardLogs.Add(new CardLog()
                                    {
                                        CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                    });
                                }

                                if (_card.Card.CardStatus == CardStatus.Active && _card.CustomerType != CustomerType.Technic)
                                {
                                    decimal amount = (decimal)(_card.SubscribAmount / service_days / Utils.Utils.divide_card_charge_interval);

                                    amount -= (amount * (decimal)_card.Card.Discount / 100);
                                    if (amount <= 0)
                                    {
                                        continue;
                                    }
                                    _db.CardCharges.Add(new CardCharge()
                                    {
                                        CardId = _card.Card.Id, Amount = amount, Tdate = today, Status = CardChargeStatus.Daily
                                    });
                                }
                            }
                            else
                            {
                                int    pay_count = _db.Payments.Where(p => p.CardId == _card.Card.Id).Count();
                                double min_price = pay_count == 1 ? _card.SubscribAmount : _card.MinPrice;
                                min_price -= (min_price * (double)_card.Card.Discount / 100);

                                decimal  balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                DateTime _dt     = DateTime.Now;

                                if (_dt.Day == 1)
                                {
                                    balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                    if (balance >= 0)
                                    {
                                        Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                    }
                                }

                                int diff_days = (_card.Card.FinishDate - _dt).Days;

                                if (_dt.Day > 1 && _dt.Day < jurid_pay_waiting_day)
                                {
                                    if (diff_days < 30)
                                    {
                                        balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                        if (balance >= 0)
                                        {
                                            Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                        }
                                    }
                                }

                                if (_dt.Day == jurid_pay_waiting_day)
                                {
                                    if (diff_days < 30)
                                    {
                                        DateTime f_datefrom         = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1, 0, 0, 0);
                                        DateTime f_dateto           = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 10, 0, 0, 0);
                                        var      CardCahrge_Balance = _db.CardCharges.Where(c => c.CardId == _card.Card.Id && c.Tdate >= f_datefrom && c.Tdate <= f_dateto).Select(s => s.Amount).Sum();
                                        balance = Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount);
                                        balance = balance - CardCahrge_Balance;
                                        if (balance >= 0)
                                        {
                                            Utils.Utils.SetJuridFinishDate(_db, jurid_limit_months, _card.Card.Id);
                                        }
                                        else
                                        {
                                            _card.Card.CardStatus       = CardStatus.Closed;
                                            _card.Card.CloseDate        = today;
                                            _db.Entry(_card.Card).State = System.Data.Entity.EntityState.Modified;
                                            _db.CardLogs.Add(new CardLog()
                                            {
                                                CardId = _card.Card.Id, Date = today, Status = CardLogStatus.Close, UserId = 1
                                            });
                                        }
                                    }
                                }

                                if (!cas_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), _card.CasIds.ToArray(), _card.Card.CloseDate.AddHours(-4), _card.Card.FinishDate.AddHours(-4), true))
                                {
                                    _db.ChargeCrushLogs.Add(new ChargeCrushLog
                                    {
                                        Date               = today,
                                        CardNum            = _card.Card.CardNum,
                                        ChargeCrushLogType = ChargeCrushLogType.EntitlementClose,
                                        Text               = "ბარათი: " + _card.Card.CardNum + ";" + _card.Card.AbonentNum
                                    });
                                }

                                if (_card.Card.CardStatus == CardStatus.Active && _card.CustomerType != CustomerType.Technic)
                                {
                                    decimal amount = (decimal)(_card.SubscribAmount / service_days / Utils.Utils.divide_card_charge_interval);

                                    amount -= (amount * (decimal)_card.Card.Discount / 100);
                                    if (amount <= 0)
                                    {
                                        continue;
                                    }
                                    _db.CardCharges.Add(new CardCharge()
                                    {
                                        CardId = _card.Card.Id, Amount = amount, Tdate = today, Status = CardChargeStatus.Daily
                                    });
                                }
                            }
                        }
                        _db.SaveChanges();

                        foreach (CardDetailData _card in _cards.Where(c => c.Card.CardStatus == CardStatus.Blocked))
                        {
                            Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id && s.Status == true).First();
                            List <SubscriptionPackage> sbp = _db.SubscriptionPackages.Include("Package").Where(s => s.SubscriptionId == sb.Id).ToList();

                            if (sbp.Any(p => p.Package.RentType == RentType.rent))
                            {
                                _db.CardCharges.Add(new CardCharge()
                                {
                                    CardId = _card.Card.Id, Amount = Math.Round((decimal)pen_daily_amount, 2), Tdate = DateTime.Now, Status = CardChargeStatus.PenDaily
                                });
                            }
                        }
                        _db.SaveChanges();

                        cas_socket.Disconnect();
                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        using (StreamWriter writer = new StreamWriter("../path_to_error_log_file", true))
                        {
                            writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
                                             "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }
                        using (DataContext _db_log = new DataContext())
                        {
                            _db_log.ChargeCrushLogs.Add(new ChargeCrushLog
                            {
                                Date               = DateTime.Now,
                                CardNum            = "",
                                ChargeCrushLogType = ChargeCrushLogType.Crush,
                                Text               = (ex.Message != null ? ex.Message : "null")
                            });
                            _db_log.SaveChanges();
                        }
                    }
                }
            }
        }
Exemplo n.º 18
0
        public void Subscribe(QueuePlanEventType eventType, QueuePlanSubscribtionArgs args = null)
        {
            if (!IsSubscribed(eventType))
            {
                lock (subscriptions)
                {
                    logger.Debug("Подписка на событие [{0}] для [{1}]", eventType, sessionId);

                    switch (eventType)
                    {
                        case QueuePlanEventType.CallClient:
                            QueueInstance.OnCallClient += queueInstance_OnCallClient;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnCallClient,
                                Args = args
                            };
                            break;

                        case QueuePlanEventType.ClientRequestUpdated:
                            QueueInstance.OnClientRequestUpdated += queueInstance_OnClientRequestUpdated;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnClientRequestUpdated,
                                Args = args
                            };
                            break;

                        case QueuePlanEventType.CurrentClientRequestPlanUpdated:
                            QueueInstance.OnCurrentClientRequestPlanUpdated += queueInstance_OnCurrentClientRequestPlanUpdated;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnCurrentClientRequestPlanUpdated,
                                Args = args
                            };
                            break;

                        case QueuePlanEventType.OperatorPlanMetricsUpdated:
                            QueueInstance.OnOperatorPlanMetricsUpdated += queueInstance_OnOperatorPlanMetricsUpdated;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnOperatorPlanMetricsUpdated,
                                Args = args
                            };
                            break;

                        case QueuePlanEventType.ConfigUpdated:
                            QueueInstance.OnConfigUpdated += queueInstance_OnConfigUpdated;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnConfigUpdated,
                                Args = args
                            };
                            break;

                        case QueuePlanEventType.Event:
                            QueueInstance.OnEvent += queueInstance_OnEvent;

                            subscriptions[eventType] = new Subscribtion()

                            {
                                EventHandler = queueInstance_OnEvent,
                                Args = args
                            };
                            break;
                    }
                }
            }
        }