コード例 #1
0
        public void SendOSD(string CardNum, string messageText_Geo, List <Param> ParamList)
        {
            int osd_duration = int.Parse(ParamList.First(c => c.Name == "OSDDuration").Value);

            string[]  address = ParamList.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();

            if (_socket.SendOSDRequest(int.Parse(CardNum), messageText_Geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), 0))
            {
            }

            _socket.Disconnect();
        }
コード例 #2
0
ファイル: SendOSD.cs プロジェクト: radtek/DigitalTvBilling
 public void SendUnLock(int CardNum)
 {
     for (int i = 21; i <= 65; i++)
     {
         if (i != 21 && i != 22 && i != 26 && i != 27 && i != 28 && i != 30 && i != 32 && i != 33 && i != 36 && i != 41 && i != 43 && i != 47)
         {
             CASSocket _socket = new CASSocket()
             {
                 IP = "192.168.4.143", Port = 8000
             };
             _socket.Connect();
             if (!_socket.SendOSDRequest(int.Parse("63698151"), UnLockOSD(i), DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), 1))
             {
             }
             _socket.Disconnect();
             Thread.Sleep(27000);
         }
     }
 }
コード例 #3
0
ファイル: SendOSD.cs プロジェクト: radtek/DigitalTvBilling
        public void SendOSDCard(DataContext _db, CardDetailData _card)
        {
            var _params = _db.Params.ToList();

            string[]  address = _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();

            if (!_socket.SendEntitlementRequest(Convert.ToInt32(_card.Card.CardNum), new short[1] {
                9
            }, DateTime.Now.AddHours(-4), _card.Card.RentFinishDate.AddHours(-4), true))
            {
                //throw new Exception(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss" + "ვერ მოხერხდა ბარათის სტატუსის შეცვლა: " + Utils.Utils.GetEnumDescription(_card.Card.CardStatus) + " , " + _card.Card.AbonentNum));
            }
            _socket.Disconnect();
        }
コード例 #4
0
        public void MiniSMSDelete()
        {
            using (DataContext _db = new DataContext())
            {
                try
                {
                    Task.Run(async() => { await Utils.Utils.sendMessage("598733767", "MiniSMS დაწყება - " + DateTime.Now.ToString()); }).Wait();
                    var __cards = _db.Cards.Include("Customer").Include("Subscribtions.SubscriptionPackages.Package").Where(c => c.CardStatus != CardStatus.Canceled && (c.CardStatus == CardStatus.Closed)).ToList();
                    var _Card   = __cards.Where(c => c.Subscribtions.Where(s => s.Status == true).First().SubscriptionPackages.Any(s => s.Package.Price == 12)).Select(c => c).ToList();
                    __cards = __cards.Except(_Card).ToList();
                    string[] address = _db.Params.Where(p => p.Name == "CASAddress").Select(c => c.Value).First().Split(':');
                    int      count = 0, error = 0;
                    foreach (var item in __cards)
                    {
                        CardDetailData cardDetailData = new CardDetailData();
                        cardDetailData.CasIds = item.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId);
                        for (int i = 1; i <= 30; i++)
                        {
                            CASSocket _socket = new CASSocket()
                            {
                                IP = address[0], Port = int.Parse(address[1])
                            };
                            _socket.Connect();
                            if (!_socket.SendEntitlementRequest(Convert.ToInt32(item.CardNum), cardDetailData.CasIds.ToArray(), item.FinishDate.AddHours(-4).AddDays(i), item.FinishDate.AddHours(-4).AddDays(i), false))
                            {
                                error++;
                            }

                            _socket.Disconnect();
                        }
                        count++;
                    }
                    Task.Run(async() => { await Utils.Utils.sendMessage("598733767", "MiniSMS ერორი " + error + " - " + DateTime.Now.ToString()); }).Wait();
                }
                catch (Exception ex)
                {
                    var xx = ex;
                }
            }
        }
コード例 #5
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())
            {
                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!=4";

                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;
                List <AutoMessageTemplate> queries = _db.AutoMessageTemplates.ToList();

                _db.Database.CommandTimeout = 6000;
                using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        foreach (var _query in queries)
                        {
                            int[] ids = _db.Database.SqlQuery <int>(sql + _query.Query).ToArray();

                            Message _mess = new Message
                            {
                                UserId          = 1,
                                IsActive        = true,
                                Date            = DateTime.Now,
                                MessageText     = _query.MessageText,
                                MessageType     = Convert.ToString((int)_query.MessageType),
                                MessageAbonents = ids.Select(a => new MessageAbonent {
                                    CardId = a
                                }).ToList()
                            };
                            _db.Messages.Add(_mess);

                            if (_query.IsDisposable)
                            {
                                _db.AutoMessageTemplates.Remove(_query);
                                _db.Entry(_query).State = EntityState.Deleted;
                            }

                            this.AddLoging(_db,
                                           LogType.Message,
                                           LogMode.Add,
                                           1,
                                           _mess.Id,
                                           "ავტომატური მესიჯი",
                                           new List <LoggingData>()
                                           );

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

                            if (_query.MessageType == MessageType.Email || _query.MessageType == MessageType.OSD)
                            {
                                CASSocket _socket = new CASSocket()
                                {
                                    IP = address[0], Port = int.Parse(address[1])
                                };
                                _socket.Connect();
                                foreach (Card card in cards)
                                {
                                    _query.MessageText = Utils.Utils.ReplaceMessageTags(_query.MessageText, card, _db);
                                    switch (_query.MessageType)
                                    {
                                    case MessageType.OSD:     //osd
                                    {
                                        if (!_socket.SendOSDRequest(int.Parse(card.CardNum), _query.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                        {
                                            _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                {
                                                    CardId      = card.Id,
                                                    MessageId   = _mess.Id,
                                                    MessageType = MessageType.OSD,
                                                });
                                        }
                                    }
                                    break;

                                    case MessageType.Email:
                                    {
                                        if (!_socket.SendEmailRequest(int.Parse(card.CardNum), _query.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc)))
                                        {
                                            _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                {
                                                    CardId      = card.Id,
                                                    MessageId   = _mess.Id,
                                                    MessageType = MessageType.Email,
                                                });
                                        }
                                    }
                                    break;
                                    }
                                }
                                _socket.Disconnect();
                            }
                            _db.SaveChanges();
                            if (_query.MessageType == MessageType.SMS) //sms
                            {
                                Utils.Utils.OnSendSMS(cards, _query.MessageText, username, password, _db, _mess.Id);
                            }
                        }
                        tran.Commit();
                    }
                    catch
                    {
                        tran.Rollback();
                    }
                }
            }
        }
コード例 #6
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();
                    }
                }
            }
        }
コード例 #7
0
        public JsonResult SendMessage(List <SendData> data)
        {
            var alert_message = "";

            using (DataContext _db = new DataContext())
            {
                _db.Database.CommandTimeout = 6000;
                try
                {
                    DateTime dateFrom, dateTo;
                    if (data.Select(s => s.selected).FirstOrDefault() == true)
                    {
                        var smsid   = data[0].smsId;
                        var smstype = data[0].smsType;
                        var dtfrom  = data[0].dateFrom;
                        var dtto    = data[0].dateTo;
                        data.Clear();
                        var sendData = _db.Towers.ToList();
                        for (int j = 0; j < sendData.Count(); j++)
                        {
                            SendData send = new SendData();
                            send.Id       = sendData[j].Id;
                            send.smsId    = smsid;
                            send.manual   = true;
                            send.selected = true;
                            send.smsType  = smstype;
                            send.dateFrom = dtfrom;
                            send.dateTo   = dtto;
                            data.Add(send);
                        }
                    }
                    int user_id = ((User)Session["CurrentUser"]).Id;
                    if (data != null)
                    {
                        var groupedCardList = data
                                              .GroupBy(u => u.smsId)
                                              .Select(grp => grp.ToList())
                                              .ToList();

                        foreach (var dataitem in groupedCardList)
                        {
                            var send_text = "";
                            var smstyp    = dataitem.Select(s => s.smsType).FirstOrDefault();
                            if (dataitem.Select(s => s.manual).FirstOrDefault() == true)
                            {
                                send_text = dataitem.Select(s => s.smsId).FirstOrDefault();
                            }
                            else
                            {
                                var id = Convert.ToInt32(dataitem.Select(s => s.smsId).FirstOrDefault());
                                send_text = _db.MessageTemplates.Where(a => a.Id == id).Select(s => s.Desc).FirstOrDefault();
                            }
                            var     messge_indicator = 0;
                            Message message          = new Message();
                            message.UserId      = user_id;
                            message.Date        = DateTime.Now;
                            message.MessageType = smstyp.ToString();
                            message.MessageText = send_text;

                            foreach (var item in dataitem)
                            {
                                dateFrom = Convert.ToDateTime(item.dateFrom);
                                dateTo   = Convert.ToDateTime(item.dateTo);
                                var             cards      = _db.Cards.Where(c => c.TowerId == item.Id && c.CardStatus != CardStatus.Canceled).Select(s => s).ToList();
                                List <Customer> custumer   = _db.Customers.ToList();
                                List <int>      abonent_id = new List <int>();
                                //List<int> cardID = new List<int>(); /*abonent.Select(s => s.CustomerId).Distinct().ToList();*/

                                List <MessageAbonent> messageabonent = new List <MessageAbonent>();

                                if (messge_indicator == 0 && cards.Count() != 0)
                                {
                                    messge_indicator = 1;
                                    _db.Messages.Add(message);
                                    _db.SaveChanges();
                                }

                                foreach (var i in cards)
                                {
                                    if (abonent_id.Contains(i.CustomerId))
                                    {
                                    }
                                    else
                                    {
                                        abonent_id.Add(i.CustomerId);
                                        //cardID.Add(i.Id);
                                        messageabonent.Add(new MessageAbonent
                                        {
                                            MessageId = _db.Messages.OrderByDescending(o => o.Id).Select(s => s.Id).FirstOrDefault(),
                                            CardId    = i.Id,
                                        });
                                    }
                                }
                                if (cards.Count != 0)
                                {
                                    _db.MessageAbonents.AddRange(messageabonent);
                                    _db.SaveChanges();
                                }
                                string[] typess = message.MessageType.Split(',');
                                if (typess.Contains("2")) //sms
                                {
                                    for (int i = 0; i < abonent_id.Count(); i++)
                                    {
                                        string onRegMsg = "";

                                        if (send_text != null)
                                        {
                                            onRegMsg      = String.Format(send_text, item.dateFrom, item.dateTo);
                                            alert_message = "შეტყობინების გაგზავნა წარმატებით შესრულდა!";
                                            var phone = custumer.Where(c => c.Id == abonent_id[i]).Select(s => s.Phone1).FirstOrDefault();
                                            Task.Run(async() => { await Utils.Utils.sendMessage(phone, onRegMsg); }).Wait();
                                        }
                                    }
                                }

                                string[] types = message.MessageType.Split(',');

                                if (types.Contains("0") || types.Contains("1"))
                                {
                                    int[]       ids    = cards.Select(s => s.Id).Distinct().ToArray();
                                    List <Card> _cards = _db.Cards.Include(c => c.Customer).Include(c => c.Tower).Include(c => c.Receiver)
                                                         .Where(c => c.CardStatus != CardStatus.Canceled)
                                                         .Where(c => ids.Contains(c.Id))
                                                         .Select(c => c).ToList();

                                    List <Param> Params = _db.Params.ToList();

                                    int      osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value);
                                    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;

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

                                    foreach (Card card in _cards)
                                    {
                                        message.MessageText = Utils.Utils.ReplaceMessageTags(message.MessageText, card, _db);
                                        foreach (string type in types)
                                        {
                                            switch (type)
                                            {
                                            case "0":     //osd
                                            {
                                                if (!_socket.SendOSDRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                                {
                                                    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                        {
                                                            CardId      = card.Id,
                                                            MessageId   = message.Id,
                                                            MessageType = MessageType.OSD,
                                                        });
                                                }
                                            }
                                            break;

                                            case "1":
                                            {
                                                if (!_socket.SendEmailRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc)))
                                                {
                                                    _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                        {
                                                            CardId      = card.Id,
                                                            MessageId   = message.Id,
                                                            MessageType = MessageType.Email,
                                                        });
                                                }
                                            }
                                            break;
                                            }
                                        }
                                    }
                                    _db.SaveChanges();
                                    _socket.Disconnect();
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    var error = ex;
                    return(Json(alert_message));
                }
                return(Json(alert_message));
            }
        }
コード例 #8
0
        //[ValidateAntiForgeryToken]
        public JsonResult NewMessage(Message message)
        {
            if (ModelState.IsValid)
            {
                using (DataContext _db = new DataContext())
                {
                    _db.Database.CommandTimeout = 6000;
                    using (DbContextTransaction tran = _db.Database.BeginTransaction(IsolationLevel.Snapshot))
                    {
                        try
                        {
                            int user_id = ((User)Session["CurrentUser"]).Id;

                            message.UserId          = user_id;
                            message.Date            = DateTime.Now;
                            message.MessageAbonents = message.AbonentIds.Select(a => new MessageAbonent {
                                CardId = a
                            }).ToList();
                            _db.Messages.Add(message);
                            _db.SaveChanges();

                            List <string> abonents = _db.Customers.Where(c => message.AbonentIds.Contains(c.Id)).Select(c => c.Name + " " + c.LastName).ToList();
                            this.AddLoging(_db,
                                           LogType.Message,
                                           LogMode.Add,
                                           user_id,
                                           message.Id,
                                           string.IsNullOrEmpty(message.TemplateType) ? "ერთჯერადი" : message.TemplateType,
                                           Newtonsoft.Json.JsonConvert.DeserializeObject <List <LoggingData> >(message.Logging).Where(c => c.field != null || c.field != "").ToList()
                                           );
                            _db.SaveChanges();

                            int[]       ids   = message.AbonentIds.Distinct().ToArray();
                            List <Card> cards = _db.Cards.Include(c => c.Customer).Include(c => c.Tower).Include(c => c.Receiver)
                                                .Where(c => c.CardStatus != CardStatus.Canceled)
                                                .Where(c => ids.Contains(c.Id))
                                                .Select(c => c).ToList();

                            List <Param> Params = _db.Params.ToList();

                            int      osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value);
                            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;
                            string[] types        = message.MessageType.Split(',');

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

                                foreach (Card card in cards)
                                {
                                    message.MessageText = Utils.Utils.ReplaceMessageTags(message.MessageText, card, _db);
                                    foreach (string type in types)
                                    {
                                        switch (type)
                                        {
                                        case "0":     //osd
                                        {
                                            if (!_socket.SendOSDRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration))
                                            {
                                                _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                    {
                                                        CardId      = card.Id,
                                                        MessageId   = message.Id,
                                                        MessageType = MessageType.OSD,
                                                    });
                                            }
                                        }
                                        break;

                                        case "1":
                                        {
                                            if (!_socket.SendEmailRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc)))
                                            {
                                                _db.MessageNotSendLogs.Add(new MessageNotSendLog
                                                    {
                                                        CardId      = card.Id,
                                                        MessageId   = message.Id,
                                                        MessageType = MessageType.Email,
                                                    });
                                            }
                                        }
                                        break;
                                        }
                                    }
                                }
                                _db.SaveChanges();
                                _socket.Disconnect();
                            }

                            if (types.Contains("2")) //sms
                            {
                                Utils.Utils.OnSendSMS(cards, message.MessageText, username, password, _db, message.Id);
                            }

                            tran.Commit();
                            return(Json("1"));
                        }
                        catch
                        {
                            tran.Rollback();
                        }
                    }
                }
            }

            return(Json("0"));
        }
コード例 #9
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");
            }
        }
コード例 #10
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();
            }
        }
コード例 #11
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();
                        }
                    }
                }
            }
        }
コード例 #12
0
        public JsonResult Package(Models.Package package)
        {
            if (ModelState.IsValid)
            {
                using (DataContext _db = new DataContext())
                {
                    using (DbContextTransaction tran = _db.Database.BeginTransaction(IsolationLevel.Snapshot))
                    {
                        try
                        {
                            int user_id = ((User)Session["CurrentUser"]).Id;
                            if (package.Id == 0)
                            {
                                package.UserId = user_id;
                                _db.Packages.Add(package);
                                _db.SaveChanges();
                                this.AddLoging(_db,
                                               LogType.Package,
                                               LogMode.Add,
                                               user_id,
                                               package.Id,
                                               package.Name,
                                               Utils.Utils.GetAddedData(typeof(Package), package)
                                               );
                            }
                            else
                            {
                                Models.Package pack = _db.Packages.Where(p => p.Id == package.Id).FirstOrDefault();
                                if (pack != null)
                                {
                                    double old_price       = pack.Price;
                                    double old_jurid_price = pack.JuridPrice;
                                    int    old_cas_id      = pack.CasId;
                                    pack.Name             = package.Name;
                                    pack.Price            = package.Price;
                                    pack.CasId            = package.CasId;
                                    pack.IsDefault        = package.IsDefault;
                                    pack.JuridPrice       = package.JuridPrice;
                                    pack.MinPrice         = package.MinPrice;
                                    pack.RentType         = package.RentType;
                                    _db.Entry(pack).State = System.Data.Entity.EntityState.Modified;
                                    _db.SaveChanges();
                                    if (old_price != package.Price || old_jurid_price != package.JuridPrice)
                                    {
                                        var _cards = _db.Cards.Where(q => q.Subscribtions.Where(c => c.Status).Any())
                                                     .Where(q => q.Subscribtions.Where(c => c.Status).Any(c => c.SubscriptionPackages.Any(p => p.PackageId == pack.Id)))
                                                     .Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData
                                        {
                                            CustomerType         = c.Customer.Type,
                                            IsBudget             = c.Customer.IsBudget,
                                            PaymentAmount        = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0,
                                            ChargeAmount         = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0,
                                            Card                 = c,
                                            Subscribtion         = c.Subscribtions.Where(s => s.Status).FirstOrDefault(),
                                            SubscriptionPackages = c.Subscribtions.Where(s => s.Status).FirstOrDefault().SubscriptionPackages.ToList()
                                        }).ToList();

                                        var     Params             = _db.Params.ToList();
                                        string  charge_time        = Params.First(p => p.Name == "CardCharge").Value;
                                        decimal jurid_limit_months = decimal.Parse(Params.First(p => p.Name == "JuridLimitMonths").Value);
                                        foreach (CardDetailData _card in _cards)
                                        {
                                            if (_card.Subscribtion != null)
                                            {
                                                _card.Subscribtion.Amount           = _db.SubscriptionPackages.Include("Package").Where(s => s.SubscriptionId == _card.Subscribtion.Id).Sum(p => _card.CustomerType == CustomerType.Juridical ? p.Package.JuridPrice : p.Package.Price);
                                                _db.Entry(_card.Subscribtion).State = System.Data.Entity.EntityState.Modified;

                                                if (_card.Card.CardStatus != CardStatus.FreeDays && !(_card.Card.CardStatus == CardStatus.Active && _card.Card.Mode == 1))
                                                {
                                                    Utils.Utils.ChangeFinishDateByPackage(_db, _card, charge_time, jurid_limit_months, (decimal)_card.Subscribtion.Amount);
                                                }
                                            }
                                        }
                                    }

                                    if (old_cas_id != package.CasId)
                                    {
                                        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();

                                        var _cards = _db.Cards.Where(q => q.Subscribtions.Where(c => c.Status).Any(c => c.SubscriptionPackages.Any(p => p.PackageId == pack.Id)))
                                                     .Where(c => c.CardStatus != CardStatus.Canceled).ToList();
                                        foreach (Card _card in _cards)
                                        {
                                            int card_num = int.Parse(_card.CardNum);
                                            if (!_socket.SendEntitlementRequest(card_num, new short[] { (short)old_cas_id }, DateTime.SpecifyKind(_card.CasDate, DateTimeKind.Utc), false))
                                            {
                                                throw new Exception();
                                            }

                                            _card.CasDate          = DateTime.Now;
                                            _db.Entry(_card).State = EntityState.Modified;
                                            if (!_socket.SendEntitlementRequest(card_num, new short[] { (short)package.CasId }, DateTime.SpecifyKind(_card.CasDate, DateTimeKind.Utc), true))
                                            {
                                                throw new Exception();
                                            }
                                        }
                                        _socket.Disconnect();
                                        _db.SaveChanges();
                                    }

                                    List <LoggingData> logs = Newtonsoft.Json.JsonConvert.DeserializeObject <List <LoggingData> >(package.Logging);
                                    if (logs != null && logs.Count > 0)
                                    {
                                        this.AddLoging(_db,
                                                       LogType.Package,
                                                       LogMode.Change,
                                                       user_id,
                                                       package.Id,
                                                       package.Name,
                                                       logs
                                                       );
                                    }
                                }
                            }
                            _db.SaveChanges();
                            tran.Commit();
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            return(Json("0"));
                        }
                    }
                }
                return(Json("1"));
            }
            return(Json("0"));
        }