public void Init() { Customer customerForTest = new Customer("FirstName SecondName", 0711535724, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest1 = new Customer("FirstName SecondName", 0711593911, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest2 = new Customer("FirstName SecondName", 0711593912, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest3 = new Customer("FirstName SecondName", 0711593913, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest4 = new Customer("FirstName SecondName", 0711593914, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest5 = new Customer("FirstName SecondName", 0711593915, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest6 = new Customer("FirstName SecondName", 0711593916, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest7 = new Customer("FirstName SecondName", 0711593917, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'A'); Customer customerForTest8 = new Customer("FirstName SecondName", 0711535725, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'B'); Customer customerForTest9 = new Customer("FirstName SecondName", 0711535726, "Address1, Address2.", new DateTime(2010, 5, 27, 10, 0, 0), 'B'); listOfCustomers.Add(customerForTest); listOfCustomers.Add(customerForTest1); listOfCustomers.Add(customerForTest2); listOfCustomers.Add(customerForTest3); listOfCustomers.Add(customerForTest4); listOfCustomers.Add(customerForTest5); listOfCustomers.Add(customerForTest6); listOfCustomers.Add(customerForTest7); listOfCustomers.Add(customerForTest8); listOfCustomers.Add(customerForTest9); _sut = new BillingEngine(listOfCustomers); }
public void Calculate_Free_Minutes_Correctly() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", PackageCode = "Package C" } }; var cdrs = new List <CallDetailsRecord>() { new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 PM (Peak call) DurationInSeconds = 120 } }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); Assert.AreEqual(1, bills[0].CallList.Count); Assert.AreEqual(2, bills[0].CallList[0].Charge); }
public void Calculate_OffPeak_Billing_Charges_for_Local_Calls_Before_Peak_Correctly() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", PackageCode = "Package A" } }; var cdrs = new List <CallDetailsRecord>() { new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 7, 30, 0), // 01-01-2017 7:30 AM (Off-peak call) DurationInSeconds = 120 } }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); Assert.AreEqual(1, bills[0].CallList.Count); Assert.AreEqual(4, bills[0].CallList[0].Charge); }
public void Calculate_Peak_Billing_Charges_for_Long_Distance_Calls_Correctly() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", PackageCode = "Package A" } }; var cdrs = new List <CallDetailsRecord>() { new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "071-2342345", //Long distance call (different extensions) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 120 } }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); Assert.AreEqual(1, bills[0].CallList.Count); Assert.AreEqual(10, bills[0].CallList[0].Charge); }
static void Main(string[] args) { for (int i = 0; i < 999; i++) { Console.WriteLine("Enter Customer Number: XXX-XXXXXXX"); // Prompt string input_val = Console.ReadLine(); // Get string from user Console.WriteLine("-----------------------"); BillingEngine bil = new BillingEngine(); bil.Genarate(input_val); } Console.WriteLine(); }
public void Generate_Bills_For_Each_Customer() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", FullName = "Customer Name 1", BillingAddress = "Billing Address 1", PackageCode = "Package A" }, new Customer() { PhoneNumber = "077-2345434", FullName = "Customer Name 2", BillingAddress = "Billing Address 2", PackageCode = "Package B" }, new Customer() { PhoneNumber = "077-2345343", FullName = "Customer Name 3", BillingAddress = "Billing Address 3", PackageCode = "Package A" }, }; var cdrs = new List <CallDetailsRecord>() { }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); Assert.AreEqual(3, bills.Count); var bill1 = bills.FirstOrDefault(b => b.PhoneNumber == "077-7342345"); Assert.IsNotNull(bill1); Assert.AreEqual("Customer Name 1", bill1.FullName); Assert.AreEqual("Billing Address 1", bill1.BillingAddress); var bill2 = bills.FirstOrDefault(b => b.PhoneNumber == "077-2345434"); Assert.IsNotNull(bill2); Assert.AreEqual("Customer Name 2", bill2.FullName); Assert.AreEqual("Billing Address 2", bill2.BillingAddress); }
public void Calculate_Summery_With_Discount_Correctly() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", PackageCode = "Package A" } }; var cdrs = new List <CallDetailsRecord>() { new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 12000 }, new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 3000 }, new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 7000 } }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); Assert.AreEqual(1, bills.Count); Assert.AreEqual(3, bills[0].CallList.Count); Assert.AreEqual(100, bills[0].Rental); Assert.AreEqual(1101, bills[0].TotalCallChareges); Assert.AreEqual(440.4M, bills[0].Discounts); Assert.AreEqual(240.2M, bills[0].Tax); Assert.AreEqual(1000.8M, bills[0].BillAmount); }
public void init() { _but = new BillingEngine(); }
public void Generate_Bills_For_Each_Customer_With_Correct_CDRs() { var customers = new List <Customer>() { new Customer() { PhoneNumber = "077-7342345", FullName = "Customer Name 1", BillingAddress = "Billing Address 1", PackageCode = "Package A" }, new Customer() { PhoneNumber = "077-2345434", FullName = "Customer Name 2", BillingAddress = "Billing Address 2", PackageCode = "Package B" }, }; var cdrs = new List <CallDetailsRecord>() { new CallDetailsRecord() { OriginatingPhoneNumber = "077-2345434", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 1, 10, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 10 }, new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 2, 8, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 20 }, new CallDetailsRecord() { OriginatingPhoneNumber = "077-2345434", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 3, 10, 00, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 30 }, new CallDetailsRecord() { OriginatingPhoneNumber = "077-7342345", RecievingPhoneNumber = "077-2342345", //Local call (same extension) StartTime = new DateTime(2017, 1, 4, 20, 30, 0), // 01-01-2017 10:30 AM (Peak call) DurationInSeconds = 40 } }; var target = new BillingEngine(); var bills = target.Generate(customers, cdrs); var bill1 = bills.FirstOrDefault(b => b.PhoneNumber == "077-7342345"); Assert.IsNotNull(bill1); Assert.AreEqual(2, bill1.CallList.Count); var call1 = bill1.CallList.FirstOrDefault(c => c.StartTime == new DateTime(2017, 1, 2, 8, 30, 0)); Assert.IsNotNull(call1); Assert.AreEqual(20, call1.DurationInSeconds); var call2 = bill1.CallList.FirstOrDefault(c => c.StartTime == new DateTime(2017, 1, 4, 20, 30, 0)); Assert.IsNotNull(call2); Assert.AreEqual(40, call2.DurationInSeconds); }
public override bool Sync() { //Get orders placed since last sync (based on Order's id) from Nop using Web Service using (Main Mercator = new Main(directory, null, ConfigurationManager.AppSettings["MercatorLogin"], ConfigurationManager.AppSettings["MercatorMdp"])) { //@"\\serveur\dossier_mercator" using (SqlConnection connection = new SqlConnection(dataSettings.DataConnectionString)) { try { connection.Open(); if (Mercator != null) { MercatorApi.Api.IsWeb = true; string jsonCommandes = ""; jsonCommandes = WebService.Get(new UrlBuilder("GenericAttribute").And().FilterEq("KeyGroup", ENTITY).FilterEq("Key", KEY_SYNCED).FilterEq("Value", "0").BuildQuery()); //jsonCommandes = WebService.Get(WebServiceUrls.ORDER_UNSYNCED); JToken[] commandes = ParserJSon.ParseResultToJTokenList(jsonCommandes); if (commandes.Length == 0) { Program.WriteLine("Pas de nouvelles commandes"); } foreach (JToken co in commandes) { try { string orderResult = WebService.Get(urlBuilder .Id((int)co["EntityId"]) .Expand("OrderItems") .BuildQuery()); //JToken[] orderToken = ParserJSon.ParseResultToJTokenList(orderResult); JObject order = JObject.Parse(orderResult); //if (order.FirstOrDefault() != null) //{ // JToken c = orderToken.FirstOrDefault(); if (((int)order["PaymentStatusId"] == 30 || (int)order["PaymentStatusId"] == 20) || (order["PaymentMethodSystemName"].ToString() == "Payments.CheckMoneyOrder")) { JObject syncMarker = new JObject(); List <int> syncedOrderIds = new List <int>(); var items = (order["OrderItems"]).ToArray(); int id = int.Parse(order["CustomerId"].ToString()); //Get web client SigCli sigCli = new SigCli(); bool exists = sigCli.ReadWhere(String.Format("C_ID_WEB = '{0}'", id)); if (!exists) { Program.log("Commande n°" + order["Id"].ToString() + " non synchronisée car le client " + id + " n'a pas été trouvé dans Mercator."); } else { //Get the journal in which the order has to be placed using (BillingEngine be = BillingEngine.InitNew(Billing.TypeVAEnum.V, 3, journal)) { be.ApplyCustomerSupplier(sigCli.GetField("C_ID").Value.ToString()); if (be.PIEDS != null) { be.PIEDS["DATE"] = DateTime.Parse(order["CreatedOnUtc"].ToString()); } else { throw new Exception("An error occured - please check that the journal exists"); } foreach (JToken i in items) { //Get product ids by SKU (Nop's SKU = S_CLE_1) JObject o = JObject.Parse(WebService.Get(new UrlBuilder("Product").Id((int)i["ProductId"]).Select("Sku").BuildQuery())); string sku = o["Sku"].ToString(); int index = be.AppendLine(); //get from db stock using cle_1 then Add ID be.InsertItem(sku, index, 1); //Use price/vat used when the order was placed : might have been some changes in Mercator since then be.LIGNES.Rows[index]["Q"] = i["Quantity"].Value <Double>() /** condit*/; be.LIGNES.Rows[index]["PU"] = i["UnitPriceExclTax"].Value <Decimal>(); /* * (1 + (i["Remise"].Value<Decimal>() / 100));*/ } //Shipping tax //TODO: faire un doc avec les étapes de l'installation + vérifications à faire //TODO: Verif: Présence d'un article frais de livraison dans le Mercator cible if (Double.Parse(order["OrderShippingInclTax"].ToString()) > 0) { string fraislivraisonId = OptionsMercator.GetOptionValue("NOP_LIV_ID").ToString(); SigStock sigStock = new SigStock(); bool fraisLivFound = sigStock.ReadWhere(String.Format("S_CLE1 = '{0}'", fraislivraisonId)); if (fraisLivFound) { int n = be.AppendLine(); be.InsertItem(sigStock.GetField("S_ID").Value.ToString(), n, 1); be.LIGNES.Rows[n]["PU"] = Double.Parse(order["OrderShippingInclTax"].ToString()) / 1.21; be.LIGNES.Rows[n]["TAUX_TVA"] = 21; } } //CODE PROMO SUR TOTAL COMMANDE //TODO:CODE PROMO - UNCOMMENT IF NECESSARY //if (Double.Parse(c["OrderDiscount"].ToString()) > 0) //{ // string codepromocommandecle1 = ConfigurationManager.AppSettings["CODEPROMOCOMMANDE"]; // SigStock sigStock = new SigStock(); // bool codePromoFound = sigStock.ReadWhere(String.Format("S_CLE1 = '{0}'", codepromocommandecle1)); // if (codePromoFound) // { // int n = be.AppendLine(); // be.InsertItem(sigStock.GetField("S_ID").Value.ToString().S_ID.TrimEnd(), n, 1); // be.LIGNES.Rows[n]["PU"] = (Double.Parse(c["OrderDiscount"].ToString())) * -1; // be.LIGNES.Rows[n]["TAUX_TVA"] = 0; // } //} be.UpdateAmounts(); #region payments //Check if order is paid : c["PaymentStatusId"] -> 10 pending, 30 paid if (order["PaymentStatusId"].ToString() == "10") { switch (order["PaymentMethodSystemName"].ToString()) { case PaymentMethods.NOP_VIREMENT: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_VIREMENT; break; case PaymentMethods.NOP_PAYPAL: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_PAYPAL; break; default: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_VIREMENT; break; } } else if (order["PaymentStatusId"].ToString() == "30") { double tot = Convert.ToDouble(be.PIEDS["TOT_TTC_DV"].ToString()); switch (order["PaymentMethodSystemName"].ToString()) { case PaymentMethods.NOP_VIREMENT: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_VIREMENT; break; case PaymentMethods.NOP_PAYPAL: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_PAYPAL; break; default: be.PIEDS["TYP_PAIEM1"] = PaymentMethods.M_VIREMENT; break; } //be.PIEDS["TYP_PAIEM1"] = 10; be.PIEDS["TOT_PAIEM1"] = tot; be.PIEDS["NET_DV"] = tot; be.PIEDS["NET_FB"] = tot; } #endregion #region shipment if (order["PickUpInStore"].ToString() == "True") { be.AppendLine(); int nAdresse = be.AppendLine(); be.LIGNES.Rows[nAdresse]["DESIGNATIO"] = "Retrait en magasin"; } else { Address billingA = AddressConverter.ParseJsonToAddress(WebService.Get(new UrlBuilder("Address").Id((int)order["BillingAddressId"]).BuildQuery())); Address shippingA = AddressConverter.ParseJsonToAddress(WebService.Get(new UrlBuilder("Address").Id((int)order["ShippingAddressId"]).BuildQuery())); if (!billingA.Equals(shippingA)) { //be.ApplyCliLiv("ID_CLI_LIV"); be.AppendLine(); int nAdresse = be.AppendLine(); be.LIGNES.Rows[nAdresse]["DESIGNATIO"] = "Adresse de livraison: "; int nN = be.AppendLine(); be.LIGNES.Rows[nN]["DESIGNATIO"] = shippingA.FirstName + " " + shippingA.LastName; int nA = be.AppendLine(); be.LIGNES.Rows[nA]["DESIGNATIO"] = shippingA.Street; int nP = be.AppendLine(); be.LIGNES.Rows[nP]["DESIGNATIO"] = shippingA.ZipPostalCode; int nV = be.AppendLine(); be.LIGNES.Rows[nV]["DESIGNATIO"] = String.Format("{0}, {1}", shippingA.City, shippingA.Country); int nPh = be.AppendLine(); be.LIGNES.Rows[nPh]["DESIGNATIO"] = shippingA.PhoneNumber; //TODO: Mode de livraison UPS + suppléments } } #endregion #region CheckoutAttributes //Récupère les attributs de commandes associés à la commande et les affiches dans les lignes_v //if (order["CheckoutAttributeDescription"].ToString() != "" && order["CheckoutAttributeDescription"].ToString() != "null") //{ // Dictionary<string, string> attributes = extractAttributes(order["CheckoutAttributesXml"].ToString()); // if (attributes.ContainsKey(ATTRIBUT_COMM)) // { // if (attributes[ATTRIBUT_COMM] != "") // { // be.AppendLine(); // int n = be.AppendLine(); // be.LIGNES.Rows[n]["DESIGNATIO"] = "Commentaires: "; // string[] commLines = attributes[ATTRIBUT_COMM].Split(new string[] { "\r" }, StringSplitOptions.None); // foreach (string s in commLines) // { // int nLine = be.AppendLine(); // be.LIGNES.Rows[nLine]["DESIGNATIO"] = s; // } // } // } //} #endregion be.PIEDS["ID_WEB"] = order["Id"].ToString(); be.PIEDS["REFERENCE"] = REF_WEB; if (be.Save()) { be.Close(); syncMarker.Add("Value", "1"); //WebService.Patch(String.Format(WebServiceUrls.ORDER_ID, (int)c["Id"]), syncMarker.ToString()); WebService.Patch(String.Format(new UrlBuilder("GenericAttribute").Id((int)co["Id"]).BuildQuery()), syncMarker.ToString()); } else { //Erreur return(false); } } //} } } } catch (Exception e) { Program.log(e.Message); Program.log(e.StackTrace); return(false); } } //****** UPDATE STATUS ********// Program.WriteLine("Updating Nop Order status..."); string ordersUncomplete = WebService.Get(urlBuilder.FilterEq("OrderStatusId", 20).BuildQuery()); JToken[] orders = ParserJSon.ParseResultToJTokenList(ordersUncomplete); if (orders.Count() > 0) { foreach (JToken o in orders) { int oId = (int)o["Id"]; PiedsV piedsV = new PiedsV(); bool exists = piedsV.Read(oId, "ID_WEB"); if (exists) { JObject patch = new JObject(); patch.Add("OrderStatusId", 30); if (Convert.ToInt32(piedsV.GetField("TYPE").Value) == 2) { patch.Add("PaymentStatusId", 30); patch.Add("ShippingStatusId", 30); } else if (Convert.ToInt32(piedsV.GetField("TYPE").Value) == 1) { patch.Add("OrderStatusId", 30); patch.Add("PaymentStatusId", 30); patch.Add("ShippingStatusId", 40); } WebService.Patch(urlBuilder.Id(oId).BuildQuery(), patch.ToString()); } } } Program.WriteLine("Updated"); } } catch (Exception e) { Program.log(e.Message); Program.log(e.StackTrace); } finally { connection.Close(); } } //context.SaveChanges(); return(true); } }