public SubscriptionPackageGrid(SubscriptionPackage model) { this.Id = model.Id; this.Price = model.Price; this.Discount = model.Discount; this.DiscountType = model.DiscountType; this.PriceAfterDiscount = model.PriceAfterDiscount(); this.Duration = model.Duration; }
public void TestPriceAfterDiscountPercentage() { var subPack = new SubscriptionPackage { Id = 1, Duration = 1, Price = 100, DiscountType = DiscountType.Percentage, Discount = 5 }; Assert.Equal(95, subPack.PriceAfterDiscount()); }
public void TestPriceAfterDiscountAmount() { var subPack = new SubscriptionPackage { Id = 1, Duration = 1, Price = 10, DiscountType = DiscountType.Amount, Discount = 5 }; Assert.Equal(5, subPack.PriceAfterDiscount()); }
public IActionResult Save(SubscriptionPackage model) { if (!ModelState.IsValid) { return(PartialView("Edit", model)); } if (model.DiscountType == null || model.DiscountType == 0) { model.Discount = 0; } var savedCategory = _subscriptionPackageService.AddOrUpdate(model); return(RedirectToAction("Index")); }
private async Task <Result <DtoSubscriptionPackage> > MergePackageWithStripeInfo(SubscriptionPackage package) { try { var result = await billingManager.GetSubscriptionPackage(package.ExternalPackageId).ConfigureAwait(false); if (result == null) { return(Result.Fail <DtoSubscriptionPackage>("Failed to fetch package info from Stripe, null response.")); } var sPackage = new DtoSubscriptionPackage { PackageId = package.PackageId, PackageName = package.PackageName, MonthlyAmount = result.MonthlyAmount, Identifier = result.Identifier, }; return(Result.Ok <DtoSubscriptionPackage>(sPackage)); } catch (Exception) { return(Result.Fail <DtoSubscriptionPackage>("Failed to fetch package info from Stripe")); } }
public void Execute(IJobExecutionContext context) { using (DataContext _db = new DataContext()) { _db.Database.CommandTimeout = 6000; using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { int limit_days = 60; int message_interval_days = 7; //SELECT DATEDIFF(minute, GETDATE(), '2006-01-01 00:00:00.0000000'); //string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id WHERE cr.status=0 AND DATEDIFF(day,Convert(varchar(10), getdate(), 126)+' 23:59:0.000',cr.finish_date)=2"; string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id where DATEDIFF(second, GETDATE(), cr.finish_date)<0 AND DATEDIFF(second, GETDATE(), cr.finish_date)>-120"; //string sql = @"SELECT cr.id FROM book.Cards as cr WHERE cr.card_num = '38067026'"; List <Param> Params = _db.Params.ToList(); string[] address = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':'); string username = Params.First(p => p.Name == "SMSPassword").Value; string password = Params.First(p => p.Name == "SMSUsername").Value; int osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value); //List<Card> cards; MessageTemplate message = _db.MessageTemplates.Where(m => m.Name == "RentLateMessage").FirstOrDefault(); MessageTemplate message_geo = _db.MessageTemplates.Where(m => m.Name == "RentLateMessage_GEO").FirstOrDefault(); int[] ids = _db.Database.SqlQuery <int>(sql).ToArray(); //cards = _db.Cards.Include("Customer")//.Include("Receiver").Include("Tower") // .Where(c => c.CardStatus == CardStatus.Active && c.Customer.Type != CustomerType.Technic) // .Where(c => ids.Contains(c.Id)) // .Select(c => c).ToList(); var cards = _db.Cards.Where(c => c.CardStatus != CardStatus.Canceled).Select(c => new CardDetailData { CustomerType = c.Customer.Type, IsBudget = c.Customer.IsBudget, SubscribAmount = c.Subscribtions.FirstOrDefault(s => s.Status).Amount, CasIds = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Select(sp => (short)sp.Package.CasId), PaymentAmount = c.Payments.Sum(p => (decimal?)p.Amount) ?? 0, ChargeAmount = c.CardCharges.Select(s => (decimal?)s.Amount).Sum() ?? 0, Card = c, MinPrice = c.Subscribtions.FirstOrDefault(s => s.Status).SubscriptionPackages.Sum(p => p.Package.MinPrice), ServiceAmount = c.CardCharges.Where(s => s.Status == CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0, WithoutServiceAmount = c.CardCharges.Where(s => s.Status != CardChargeStatus.Service).Select(s => (decimal?)s.Amount).Sum() ?? 0, CardServices = c.CardServices.ToList() }).ToList(); foreach (CardDetailData _card in cards.Where(c => c.Card.CardStatus == CardStatus.Closed)) { Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id).First(); SubscriptionPackage sbp = _db.SubscriptionPackages.Where(s => s.SubscriptionId == sb.Id).First(); Package package = _db.Packages.Where(p => p.Id == sbp.PackageId).First(); string phone = _db.Customers.Where(c => c.Id == _card.Card.CustomerId).First().Phone1; double balance = Math.Round((double)Utils.Utils.GetBalance(_card.PaymentAmount, _card.ChargeAmount), 2); if (package.RentType == RentType.rent) { if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days - 2) { MessageTemplate before_block_message = _db.MessageTemplates.Single(m => m.Name == "BeforeRentLateMessage"); string before_block_message_desc = String.Format(before_block_message.Desc, Math.Round(balance * -1 + _card.SubscribAmount, 2)); Task.Run(async() => { await Utils.Utils.sendMessage(phone, before_block_message_desc); }).Wait(); } } } foreach (CardDetailData _card in cards.Where(c => c.Card.CardStatus == CardStatus.Blocked)) { Subscribtion sb = _db.Subscribtions.Where(s => s.CardId == _card.Card.Id).First(); SubscriptionPackage sbp = _db.SubscriptionPackages.Where(s => s.SubscriptionId == sb.Id).First(); Package package = _db.Packages.Where(p => p.Id == sbp.PackageId).First(); string phone = _db.Customers.Where(c => c.Id == _card.Card.CustomerId).First().Phone1; string message_desc = String.Format(message.Desc, _card.Card.CardNum); string message_desc_geo = String.Format(message_geo.Desc, _card.Card.CardNum); if (package.RentType == RentType.rent) { //if ((DateTime.Now - _card.Card.CloseDate).Days > 1) { //if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days) //{ // MessageTemplate block_message = _db.MessageTemplates.Single(m => m.Name == "OnRentLateLimit"); // string block_message_desc = message.Desc; // String.Format(message.Desc, Math.Round((balance), 2)); // Task.Run(async () => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); //} if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1) { //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; //_socket.Connect(); //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) //{ // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = _card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); //} //_socket.Disconnect(); //_db.SaveChanges(); //Task.Run(async () => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); MessageTemplate block_message = _db.MessageTemplates.Single(m => m.Name == "OnRentLateLimit"); string block_message_desc = block_message.Desc; // String.Format(message.Desc, Math.Round((balance), 2)); Task.Run(async() => { await Utils.Utils.sendMessage(phone, block_message_desc); }).Wait(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); } if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days) { //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; //_socket.Connect(); //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) //{ // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = _card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); //} //_socket.Disconnect(); //_db.SaveChanges(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); } if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 2) { //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; //_socket.Connect(); //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) //{ // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = _card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); //} //_socket.Disconnect(); //_db.SaveChanges(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); } if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 3) { //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; //_socket.Connect(); //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) //{ // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = _card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); //} //_socket.Disconnect(); //_db.SaveChanges(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); } if ((DateTime.Now - _card.Card.CloseDate).Days == limit_days + 1 + message_interval_days * 4) { //CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; //_socket.Connect(); //if (!_socket.SendOSDRequest(int.Parse(_card.Card.CardNum), message_desc_geo, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) //{ // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = _card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); //} //_socket.Disconnect(); //_db.SaveChanges(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, message_desc); }).Wait(); } } } } //foreach (CardDetailData card in cards) //{ // CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; // _socket.Connect(); // if (!_socket.SendOSDRequest(int.Parse(card.Card.CardNum), message_geo.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) // { // _db.MessageNotSendLogs.Add(new MessageNotSendLog // { // CardId = card.Card.Id, // MessageId = message_geo.Id, // MessageType = MessageType.OSD, // }); // } // _socket.Disconnect(); // _db.SaveChanges(); // //Task.Run(async () => { await Utils.Utils.sendMessage(card.Customer.Phone1, message.MessageText); }).Wait(); //} } catch { tran.Rollback(); } } } }