public void SERIALIZE18() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create <Event>(); evt.Summary = "Test event title"; evt.Start = DateTime.Today; evt.End = DateTime.Today.AddDays(1); evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); iCalendarSerializer serializer = new iCalendarSerializer(iCal); string icalString = serializer.SerializeToString(); Assert.IsNotEmpty(icalString, "iCalendarSerializer.SerializeToString() must not be empty"); ComponentBaseSerializer compSerializer = new ComponentBaseSerializer(evt); string evtString = compSerializer.SerializeToString(); Assert.IsTrue(evtString.Equals("BEGIN:VEVENT\r\nDTEND:20070320T060000Z\r\nDTSTART;VALUE=DATE:20070319\r\nDURATION:P1D\r\nRRULE:FREQ=WEEKLY;INTERVAL=3;COUNT=4;BYDAY=TU,FR,SU\r\nSUMMARY:Test event title\r\nEND:VEVENT\r\n"), "ComponentBaseSerializer.SerializeToString() serialized incorrectly"); }
public void SERIALIZE19() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create <Event>(); evt.Summary = "Test event title"; evt.Start = new Date_Time(2007, 4, 29); evt.End = evt.Start.AddDays(1); evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); ComponentBaseSerializer compSerializer = new ComponentBaseSerializer(evt); FileStream fs = new FileStream(@"Calendars\Serialization\SERIALIZE19.ics", FileMode.Create, FileAccess.Write); compSerializer.Serialize(fs, Encoding.UTF8); fs.Close(); iCalendar iCal1 = new iCalendar(); fs = new FileStream(@"Calendars\Serialization\SERIALIZE19.ics", FileMode.Open, FileAccess.Read); Event evt1 = ComponentBase.LoadFromStream <Event>(fs, Encoding.UTF8); fs.Close(); CompareComponents(evt, evt1); }
public void SERIALIZE18() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create <Event>(); evt.Summary = "Test event title"; evt.Start = new Date_Time(2007, 3, 19); evt.Start.Kind = DateTimeKind.Utc; evt.Duration = new TimeSpan(24, 0, 0); evt.Created = evt.Start.Copy(); evt.DTStamp = evt.Start.Copy(); evt.UID = "123456789"; evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); iCalendarSerializer serializer = new iCalendarSerializer(iCal); string icalString = serializer.SerializeToString(); Assert.IsNotEmpty(icalString, "iCalendarSerializer.SerializeToString() must not be empty"); ComponentBaseSerializer compSerializer = new ComponentBaseSerializer(evt); string evtString = compSerializer.SerializeToString(); Assert.IsTrue(evtString.Equals("BEGIN:VEVENT\r\nCREATED:20070319T000000Z\r\nDTEND:20070320T000000Z\r\nDTSTAMP:20070319T000000Z\r\nDTSTART;VALUE=DATE:20070319\r\nDURATION:P1D\r\nRRULE:FREQ=WEEKLY;INTERVAL=3;COUNT=4;BYDAY=TU,FR,SU\r\nSUMMARY:Test event title\r\nUID:123456789\r\nEND:VEVENT\r\n"), "ComponentBaseSerializer.SerializeToString() serialized incorrectly"); }
public void UpdateNextTime() { switch (this.Recurrence) { case "Ημερήσια": this.NextDate = Recur.Daily().StartingFrom(this.CurrentDate).Next(); break; case "Εβδομαδιαία": this.NextDate = Recur.Weekly().StartingFrom(this.CurrentDate).Next(); break; case "Μηνιαία": this.NextDate = Recur.Monthly().StartingFrom(this.CurrentDate).Next(); break; case "Τριμηνιαία": this.NextDate = Recur.Quarterly().StartingFrom(this.CurrentDate).Next(); break; case "Εξαμηνιαία": this.NextDate = Recur.Βiannual().StartingFrom(this.CurrentDate).Next(); break; case "Ετήσια": this.NextDate = Recur.Yearly().StartingFrom(this.CurrentDate).Next(); break; } }
private void DetermineStartingRecurrence(Recur recur, ref Date_Time dt) { if (recur.Count != int.MinValue) { dt = DTStart.Copy(); } else { recur.IncrementDate(ref dt, -recur.Interval); } }
public HostedActionRequest Recur(Recur recur) { var xml = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <recur> <customerrefno>{0}</customerrefno> <subscriptionid>{1}</subscriptionid> <currency>{2}</currency> <amount>{3}</amount> </recur >", recur.CustomerRefNo, recur.SubscriptionId, recur.Currency, recur.Amount); return(new HostedActionRequest(xml, CountryCode, MerchantId, ConfigurationProvider, "/recur")); }
// FIXME: add similar methods for RDATE and EXDATE /// <summary> /// Adds a recurrence rule to the recurring component /// </summary> /// <param name="recur">The recurrence rule to add</param> public void AddRecurrence(Recur recur) { if (RRule != null) { Recur[] rules = new Recur[RRule.Length + 1]; RRule.CopyTo(rules, 0); rules[rules.Length - 1] = recur; RRule = rules; } else { RRule = new Recur[] { recur } }; }
/// <summary> /// Adds an exception recurrence rule to the recurring component /// </summary> /// <param name="recur">The recurrence rule to add</param> public void AddException(Recur recur) { if (ExRule != null) { Recur[] rules = new Recur[ExRule.Length + 1]; ExRule.CopyTo(rules, 0); rules[rules.Length - 1] = recur; ExRule = rules; } else { ExRule = new Recur[] { recur } }; }
public void TestRecurResponseFailure() { var responseXml = new XmlDocument(); responseXml.LoadXml(@"<?xml version='1.0' encoding='UTF-8'?> <response> <statuscode>107</statuscode> </response>"); RecurResponse response = Recur.Response(responseXml); Assert.That(response.TransactionId, Is.Null); Assert.That(response.CustomerRefNo, Is.Null); Assert.That(response.ClientOrderNumber, Is.Null); Assert.That(response.StatusCode, Is.EqualTo(107)); Assert.That(response.Accepted, Is.False); Assert.That(response.ErrorMessage, Is.EqualTo("Transaction rejected by bank.")); }
/// <summary> /// Adds an exception recurrence rule to the recurring component /// </summary> /// <param name="recur">The recurrence rule to add</param> public void AddException(Recur recur) { if (string.IsNullOrEmpty(recur.Name)) { recur.Name = "EXRULE"; } if (ExRule != null) { Recur[] rules = new Recur[ExRule.Length + 1]; ExRule.CopyTo(rules, 0); rules[rules.Length - 1] = recur; ExRule = rules; } else { ExRule = new Recur[] { recur } }; }
// FIXME: add similar methods for RDATE and EXDATE /// <summary> /// Adds a recurrence rule to the recurring component /// </summary> /// <param name="recur">The recurrence rule to add</param> public void AddRecurrence(Recur recur) { if (string.IsNullOrEmpty(recur.Name)) { recur.Name = "RRULE"; } if (RRule != null) { Recur[] rules = new Recur[RRule.Length + 1]; RRule.CopyTo(rules, 0); rules[rules.Length - 1] = recur; RRule = rules; } else { RRule = new Recur[] { recur } }; }
/// <summary> /// Return all the days of the month that its /// DayOfWeek is contained in the BYDAY attribute. /// </summary> /// <param name="dt"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> SpecialExpandMonth(this DateTime dt, Recur rule) { var cal = CultureInfo.InvariantCulture.Calendar; var daysOfMonth = cal.GetDaysInMonth(dt.Year, dt.Month); var daysOfWeek = rule.ByDays.Select(day => day.DayOfWeek); var output = new List <DateTime>(daysOfMonth); for (var day = 1; day <= daysOfMonth; day++) { //construct the datetime and check if the day of the week of one //of the specified in the BYDAY property var dateToAdd = new DateTime(dt.Year, dt.Month, day, dt.Hour, dt.Minute, dt.Second); if (daysOfWeek.Contains(dateToAdd.DayOfWeek)) { output.Add(dateToAdd); } } return(output); }
//[Test, Category("Serialization")] public void XCAL1() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create <Event>(); evt.Summary = "Test event title"; evt.Start = new Date_Time(2007, 4, 29); evt.End = evt.Start.AddDays(1); evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); xCalSerializer serializer = new xCalSerializer(iCal); serializer.Serialize(@"Calendars\Serialization\XCAL1.xcal"); SerializeTest("XCAL1.xcal", typeof(xCalSerializer)); }
public void TestRecurResponse() { var responseXml = new XmlDocument(); responseXml.LoadXml(@"<?xml version='1.0' encoding='UTF-8'?> <response> <transaction id=""598972""> <customerrefno>1ba66a0d653ca4cf3a5bc3eeb9ed1a2b4</customerrefno> <paymentmethod>KORTCERT</paymentmethod> <merchantid>1130</merchantid> <amount>66600</amount> <currency>SEK</currency> <cardtype>VISA</cardtype> <maskedcardno>12345***********1234</maskedcardno> <expirymonth>07</expirymonth> <expiryyear>2099</expiryyear> <authcode>authcode</authcode> <subscriptionid>subscriptionid</subscriptionid> </transaction> <statuscode>0</statuscode> </response>"); RecurResponse response = Recur.Response(responseXml); Assert.That(response.TransactionId, Is.EqualTo(598972)); Assert.That(response.CustomerRefNo, Is.EqualTo("1ba66a0d653ca4cf3a5bc3eeb9ed1a2b4")); Assert.That(response.ClientOrderNumber, Is.EqualTo("1ba66a0d653ca4cf3a5bc3eeb9ed1a2b4")); Assert.That(response.PaymentMethod, Is.EqualTo("KORTCERT")); Assert.That(response.MerchantId, Is.EqualTo(1130)); Assert.That(response.Amount, Is.EqualTo(666.00M)); Assert.That(response.Currency, Is.EqualTo("SEK")); Assert.That(response.CardType, Is.EqualTo("VISA")); Assert.That(response.MaskedCardNo, Is.EqualTo("12345***********1234")); Assert.That(response.ExpiryMonth, Is.EqualTo("07")); Assert.That(response.ExpiryYear, Is.EqualTo("2099")); Assert.That(response.AuthCode, Is.EqualTo("authcode")); Assert.That(response.SubscriptionId, Is.EqualTo("subscriptionid")); Assert.That(response.StatusCode, Is.EqualTo(0)); Assert.That(response.Accepted, Is.True); Assert.That(response.ErrorMessage, Is.Empty); }
public static void Main(string[] args) { string host = "esplusqa.moneris.com"; string store_id = "monusqa002"; string api_token = "qatoken"; string data_key = "211mA69735Un2k3AD58d9Ia"; string order_id = "res_purchase_7"; string amount = "1.00"; string cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used string crypt_type = "2"; string commcard_invoice = "invoice"; string commcard_tax_amount = "1.00"; USResPurchaseCC usResPurchaseCC = new USResPurchaseCC(data_key, order_id, cust_id, amount, crypt_type); /********************** OPTIONAL VARIABLES ************************/ usResPurchaseCC.SetCommcardInvoice(commcard_invoice); usResPurchaseCC.SetCommcardTaxAmount(commcard_tax_amount); //usResPurchaseCC.SetExpdate("1601"); //must be YYMM format /************************* Recur Variables **********************************/ string recur_unit = "month"; string start_now = "true"; string start_date = "2008/12/01"; string num_recurs = "12"; string period = "1"; string recur_amount = "30.00"; /************************* Recur Object Option1 ******************************/ Recur recurring_cycle = new Recur(recur_unit, start_now, start_date, num_recurs, period, recur_amount); usResPurchaseCC.SetRecur(recurring_cycle); /********************** REQUEST ************************/ HttpsPostRequest mpgReq = new HttpsPostRequest(host, store_id, api_token, usResPurchaseCC); try { Receipt receipt = mpgReq.GetReceipt(); Console.WriteLine("DataKey = " + receipt.GetDataKey()); Console.WriteLine("ReceiptId = " + receipt.GetReceiptId()); Console.WriteLine("ReferenceNum = " + receipt.GetReferenceNum()); Console.WriteLine("ResponseCode = " + receipt.GetResponseCode()); Console.WriteLine("AuthCode = " + receipt.GetAuthCode()); Console.WriteLine("Message = " + receipt.GetMessage()); Console.WriteLine("TransDate = " + receipt.GetTransDate()); Console.WriteLine("TransTime = " + receipt.GetTransTime()); Console.WriteLine("TransType = " + receipt.GetTransType()); Console.WriteLine("Complete = " + receipt.GetComplete()); Console.WriteLine("TransAmount = " + receipt.GetTransAmount()); Console.WriteLine("CardType = " + receipt.GetCardType()); Console.WriteLine("TxnNumber = " + receipt.GetTxnNumber()); Console.WriteLine("TimedOut = " + receipt.GetTimedOut()); Console.WriteLine("AVSResponse = " + receipt.GetAvsResultCode()); Console.WriteLine("CVDResponse = " + receipt.GetCvdResultCode()); Console.WriteLine("RecurSuccess = " + receipt.GetRecurSuccess()); Console.WriteLine("ResSuccess = " + receipt.GetResSuccess()); Console.WriteLine("PaymentType = " + receipt.GetPaymentType()); //ResolveData Console.WriteLine("\nCust ID = " + receipt.GetResDataCustId()); Console.WriteLine("Phone = " + receipt.GetResDataPhone()); Console.WriteLine("Email = " + receipt.GetResDataEmail()); Console.WriteLine("Note = " + receipt.GetResDataNote()); Console.WriteLine("Masked Pan = " + receipt.GetResDataMaskedPan()); Console.WriteLine("Exp Date = " + receipt.GetResDataExpdate()); Console.WriteLine("Crypt Type = " + receipt.GetResDataCryptType()); Console.WriteLine("Avs Street Number = " + receipt.GetResDataAvsStreetNumber()); Console.WriteLine("Avs Street Name = " + receipt.GetResDataAvsStreetName()); Console.WriteLine("Avs Zipcode = " + receipt.GetResDataAvsZipcode()); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// Expand the dates to the given BYWEEKNO if FREQ=YEARLY; /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByWeekNo(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByWeekNo == null) { return(dateTimes.ApplyByYearDay(rule)); } //if the FREQ is other than YEARLY then do nothing if (rule.Frequency != null && rule.Frequency.Value != RecurValues.Frequencies.YEARLY) { return(dateTimes.ApplyByYearDay(rule)); } var cal = CultureInfo.InvariantCulture.Calendar; //just return the dates whos week of the year is one //of the specified var output = new List <DateTime>(); foreach (var weekNo in rule.ByWeekNo) { output.AddRange(dateTimes.SelectMany(x => x.GenerateDayOfWeek(weekNo, rule.Wkst))); } return(output.Where(x => rule.ByWeekNo. Contains(cal.GetWeekOfYear(x, CalendarWeekRule.FirstFourDayWeek, rule.Wkst))) .ApplyByYearDay(rule)); }
/// <summary> /// Expand the dates if FREQ=YEARLY. /// Limit the dates if FREQ=SECONDLY, MINUTELY or HOURLY. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByYearDay(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByYearDay == null || rule.Frequency.Value == RecurValues.Frequencies.DAILY || rule.Frequency.Value == RecurValues.Frequencies.WEEKLY || rule.Frequency.Value == RecurValues.Frequencies.MONTHLY) { return(dateTimes.ApplyByMonthDay(rule)); } //limit the dateTImes if the FREQ is set to SECONDLY, MINUTELY or HOURLY if (rule.Frequency.Value == RecurValues.Frequencies.MINUTELY || rule.Frequency.Value == RecurValues.Frequencies.HOURLY || rule.Frequency.Value == RecurValues.Frequencies.SECONDLY) //TODO:NEAGATIVE number { return(dateTimes.Where(x => rule.ByYearDay.Contains(x.DayOfYear)).ApplyByMonthDay(rule)); } //expand the datetimes if the FREQ is set to YEARLY var output = new List <DateTime>(); foreach (var dateTime in dateTimes) { foreach (var day in rule.ByYearDay) { //if the day is negative then create the ref date the the last day of the year, //otherwise create it to the first day var refDate = day > 0 ? new DateTime(dateTime.Year, 1, 1, dateTime.Hour, dateTime.Minute, dateTime.Second) : new DateTime(dateTime.Year, 12, 31, dateTime.Hour, dateTime.Minute, dateTime.Second); output.Add(refDate.AddDays(day - 1)); } } return(output.ApplyByMonthDay(rule)); }
public static void Main(string[] args) { string host = "esplusqa.moneris.com"; string order_id = "dotnetachdebitrecurtest12323"; string store_id = "monusqa002"; string api_token = "qatoken"; string amount = "1.00"; //ACHInfo Variables string sec = "pop"; string cust_first_name = "Bob"; string cust_last_name = "Smith"; string cust_address1 = "3300 Bloor St W"; string cust_address2 = "4th floor west tower"; string cust_city = "Toronto"; string cust_state = "ON"; string cust_zip = "M1M1M1"; string routing_num = "490000018"; string account_num = "222222"; string check_num = "11"; string account_type = "checking"; string micr = "t071000013t742941347o128"; string dl_num = "CO-12312312"; string magstripe = "no"; string image_front = ""; string image_back = ""; ACHInfo achinfo = new ACHInfo(sec, cust_first_name, cust_last_name, cust_address1, cust_address2, cust_city, cust_state, cust_zip, routing_num, account_num, check_num, account_type, micr); achinfo.SetImgFront(image_front); achinfo.SetImgBack(image_back); achinfo.SetDlNum(dl_num); achinfo.SetMagstripe(magstripe); ACHDebit achdebit = new ACHDebit(order_id, amount, achinfo); //************************OPTIONAL VARIABLES*************************** //Cust_id Variable string cust_id = "customer1"; achdebit.SetCustId(cust_id); //Recur Variables //hard coded values for testing string recur_unit = "month"; //valid values are (day,week,month) string start_now = "true"; //valid values are (true,false) string start_date = "2008/10/01"; string num_recurs = "12"; string period = "1"; string recur_amount = "1.01"; Recur recurInfo = new Recur(recur_unit, start_now, start_date, num_recurs, period, recur_amount); achdebit.SetRecur(recurInfo); ACHHttpsPostRequest mpgReq = new ACHHttpsPostRequest(host, store_id, api_token, achdebit); /********************** REQUEST ************************/ try { Receipt receipt = mpgReq.GetReceipt(); Console.WriteLine("CardType = " + receipt.GetCardType()); Console.WriteLine("TransAmount = " + receipt.GetTransAmount()); Console.WriteLine("TxnNumber = " + receipt.GetTxnNumber()); Console.WriteLine("ReceiptId = " + receipt.GetReceiptId()); Console.WriteLine("TransType = " + receipt.GetTransType()); Console.WriteLine("ReferenceNum = " + receipt.GetReferenceNum()); Console.WriteLine("ResponseCode = " + receipt.GetResponseCode()); Console.WriteLine("Message = " + receipt.GetMessage()); Console.WriteLine("Complete = " + receipt.GetComplete()); Console.WriteLine("TransDate = " + receipt.GetTransDate()); Console.WriteLine("TransTime = " + receipt.GetTransTime()); Console.WriteLine("Ticket = " + receipt.GetTicket()); Console.WriteLine("TimedOut = " + receipt.GetTimedOut()); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// This is the most complicated method. /// Refer to RFC 5545, pg. 41. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByDay(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByDays == null) { return(dateTimes.ApplyByHour(rule)); } var daysOfWeek = rule.ByDays.Select(day => day.DayOfWeek).ToArray(); //limit the dateTImes if the FREQ is set to SECONDLY, MINUTELY or HOURLY if (rule.Frequency.Value == RecurValues.Frequencies.MINUTELY || rule.Frequency.Value == RecurValues.Frequencies.HOURLY || rule.Frequency.Value == RecurValues.Frequencies.SECONDLY || rule.Frequency.Value == RecurValues.Frequencies.DAILY) { return(dateTimes.Where(dateTime => daysOfWeek.Contains(dateTime.DayOfWeek)). ApplyByHour(rule)); } //Limit if BYYEARDAY or BYMONTHDAY is present; otherwise if (rule.Frequency.Value == RecurValues.Frequencies.YEARLY) { if (rule.ByYearDay != null || rule.ByMonthDay != null) { return(dateTimes.Where(x => daysOfWeek.Contains(x.DayOfWeek)) .ApplyByHour(rule)); } //special expand for WEEKLY if BYWEEKNO present; else if (rule.ByWeekNo != null) { return(dateTimes.Where(x => daysOfWeek.Contains(x.DayOfWeek)) .ApplyByHour(rule)); } } //special expand for MONTHLY if BYMONTH present; //else if (rule.ByMonth != null) // return dateTimes.Where(x => daysOfWeek.Contains(x.DayOfWeek)) // .ApplyByHour(rule); //expand the dts to the given days of the week var output = new List <DateTime>(); var cal = CultureInfo.InvariantCulture.Calendar; foreach (var dt in dateTimes) { switch (rule.Frequency.Value) { case RecurValues.Frequencies.WEEKLY: var weekNum = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, rule.Wkst); var result = dt.GenerateDayOfWeek(weekNum, rule.Wkst); output.AddRange(result.Where(r => daysOfWeek.Contains(r.DayOfWeek))); break; case RecurValues.Frequencies.YEARLY: //corresponds to an offset within the year when the //BYWEEKNO or BYMONTH rule parts are present. if (rule.ByWeekNo != null) { output.AddRange(dt.ExpandYearByDay(rule)); } //corresponds to an offset within the //month when the BYMONTH rule part is present if (rule.ByMonth != null) { if (rule.ByDays.Any(x => x.OrdDay != null)) { output.AddRange(dt.SpecialExpandMonthDayWithInt(rule)); } else { output.AddRange(dt.SpecialExpandMonth(rule)); } } else { output.AddRange(dt.ExpandYearByDay(rule)); } break; case RecurValues.Frequencies.MONTHLY: //Limit if BYMONTHDAY is present; if (rule.ByMonthDay != null) { if (daysOfWeek.Contains(dt.DayOfWeek)) { output.Add(dt); } continue; } //if the BYDAYS contains integers then if (rule.ByDays.Any(x => x.OrdDay != null)) { output.AddRange(dt.SpecialExpandMonthDayWithInt(rule)); } else { output.AddRange(dt.SpecialExpandMonth(rule)); } break; } } return(output.ApplyByHour(rule)); }
public static void Main(string[] args) { string host = "esplusqa.moneris.com"; string store_id = "monusqa002"; string api_token = "qatoken"; string data_key = "1X07zf118J5g7QESF421G27"; string order_id = "res_purchase_pinless_4"; string amount = "1.00"; string cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used string intended_use = "1"; string p_account_number = "23456789"; USResPurchasePinless usResPurchasePinless = new USResPurchasePinless(data_key, order_id, cust_id, amount, intended_use); usResPurchasePinless.SetPAccountNumber(p_account_number); /************************* Recur Variables **********************************/ string recur_unit = "month"; string start_now = "true"; string start_date = "2008/12/01"; string num_recurs = "12"; string period = "1"; string recur_amount = "30.00"; /************************* Recur Object Option1 ******************************/ Recur recurring_cycle = new Recur(recur_unit, start_now, start_date, num_recurs, period, recur_amount); usResPurchasePinless.SetRecur(recurring_cycle); HttpsPostRequest mpgReq = new HttpsPostRequest(host, store_id, api_token, usResPurchasePinless); /********************** REQUEST ************************/ try { Receipt receipt = mpgReq.GetReceipt(); Console.WriteLine("DataKey = " + receipt.GetDataKey()); Console.WriteLine("ReceiptId = " + receipt.GetReceiptId()); Console.WriteLine("ReferenceNum = " + receipt.GetReferenceNum()); Console.WriteLine("ResponseCode = " + receipt.GetResponseCode()); Console.WriteLine("AuthCode = " + receipt.GetAuthCode()); Console.WriteLine("Message = " + receipt.GetMessage()); Console.WriteLine("TransDate = " + receipt.GetTransDate()); Console.WriteLine("TransTime = " + receipt.GetTransTime()); Console.WriteLine("TransType = " + receipt.GetTransType()); Console.WriteLine("Complete = " + receipt.GetComplete()); Console.WriteLine("TransAmount = " + receipt.GetTransAmount()); Console.WriteLine("CardType = " + receipt.GetCardType()); Console.WriteLine("TxnNumber = " + receipt.GetTxnNumber()); Console.WriteLine("TimedOut = " + receipt.GetTimedOut()); Console.WriteLine("RecurSuccess = " + receipt.GetRecurSuccess()); Console.WriteLine("ResSuccess = " + receipt.GetResSuccess()); Console.WriteLine("PaymentType = " + receipt.GetPaymentType()); //ResolveData Console.WriteLine("\nCust ID = " + receipt.GetResDataCustId()); Console.WriteLine("Phone = " + receipt.GetResDataPhone()); Console.WriteLine("Email = " + receipt.GetResDataEmail()); Console.WriteLine("Note = " + receipt.GetResDataNote()); Console.WriteLine("Masked Pan = " + receipt.GetResDataMaskedPan()); Console.WriteLine("Exp Date = " + receipt.GetResDataExpdate()); Console.WriteLine("Presentation Type = " + receipt.GetResDataPresentationType()); Console.WriteLine("P Account Number = " + receipt.GetResDataPAccountNumber()); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// Try to parse an string into a Recur valueType. /// In case of return false it mitgh be that it does not contain Frequency /// but the rest of proerties would be asignated to the out value; /// </summary> /// <param name="stringRecut"></param> /// <param name="resRecur"></param> /// <returns></returns> public static bool ToRecur(this string stringRecut, out Recur resRecur) { resRecur = new Recur(); //when the user calls this method directly it comes //with the name of the property (RRULE) if (stringRecut.Contains(":")) { stringRecut = stringRecut.ValuesSubString().Replace(":", ""); } var value = stringRecut.Split(';').ToList(); #region ForeachRegion foreach (var nameValue in value.Select(recurValue => recurValue.Split('='))) { switch (nameValue[0]) { case "FREQ": resRecur.Frequency = RecurValues.ParseValue(nameValue[1]); break; case "UNTIL": DateTime?untilDate; resRecur.Until = nameValue[1].ToDateTime(out untilDate) && resRecur.Count == null ? untilDate : null; break; case "COUNT": resRecur.Count = resRecur.Until == null ? nameValue[1].ToInt() : null; break; case "INTERVAL": resRecur.Interval = nameValue[1].ToInt(); break; case "BYSECOND": var seconds = ToIntArray(nameValue[1].Split(',')); if (seconds.Length > 0) { resRecur.BySeconds = seconds; } break; case "BYMINUTE": var minutes = ToIntArray(nameValue[1].Split(',')); if (minutes.Length > 0) { resRecur.ByMinutes = minutes; } break; case "BYHOUR": var hours = ToIntArray(nameValue[1].Split(',')); if (hours.Length > 0) { resRecur.ByHours = hours; } break; case "BYDAY": var temp = nameValue[1].Split(','); var wekkDays = new List <WeekDayType>(); foreach (var val in temp) { var match = RxWeekDayType.Match(val); if (match.Success) { var signInt = 1; if (match.Groups[1].Value == "-") { signInt = -1; } int?resInt = match.Groups[2].Value.ToInt(); resInt = resInt != null ? resInt * signInt : null; DayOfWeek day; if (RecurValues.TryParseValue(match.Groups[3].Value, out day)) { wekkDays.Add(new WeekDayType(resInt, day)); } } } if (wekkDays != null && wekkDays.Count > 0) { resRecur.ByDays = wekkDays.ToArray(); } break; case "BYMONTHDAY": var monthDay = ToIntArray(nameValue[1].Split(',')); if (monthDay.Length > 0) { resRecur.ByMonthDay = monthDay; } break; case "BYYEARDAY": var yearDay = ToIntArray(nameValue[1].Split(',')); if (yearDay.Length > 0) { resRecur.ByYearDay = yearDay; } break; case "BYWEEKNO": var weekNo = ToIntArray(nameValue[1].Split(',')); if (weekNo.Length > 0) { resRecur.ByWeekNo = weekNo; } break; case "BYMONTH": var month = ToIntArray(nameValue[1].Split(',')); if (month.Length > 0) { resRecur.ByMonth = month; } break; case "BYSETPOS": var setpos = ToIntArray(nameValue[1].Split(',')); if (setpos.Length > 0) { resRecur.BySetPos = setpos; } break; case "WKST": resRecur.Wkst = RecurValues.ParseValues(nameValue[1]); break; default: continue; } } #endregion ForeachRegion return(resRecur.Frequency != null); }
/// <summary> /// Limit if FREQ=SECONDLY /// Expand to the given seconds otherwise. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyBySecond(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.BySeconds == null) { return(dateTimes.ApplyBySetPos(rule)); } // TODO: add the SECONDLY if (rule.Frequency.Value == RecurValues.Frequencies.SECONDLY) { return(dateTimes.Where(dt => rule.ByMinutes.Contains(dt.Minute)).ApplyBySecond(rule)); } var output = new List <DateTime>(); foreach (var dt in dateTimes) { //generate a dt per each dt and each given hour output.AddRange(rule.BySeconds .Select(second => new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, second))); } return(output.ApplyBySetPos(rule)); }
/// <summary> /// Expand to the given minutes if FREQ=HOUTLY..YEARLY /// Limit otherwise. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByMinute(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByMinutes == null) { return(dateTimes.ApplyBySecond(rule)); } //limit the dateTImes if the FREQ is set to SECONDLY or MINUTELY //TODO: add the SECONDLY condition if (rule.Frequency.Value == RecurValues.Frequencies.MINUTELY) { return(dateTimes.Where(dt => rule.ByMinutes.Contains(dt.Minute)).ApplyBySecond(rule)); } //expand var output = new List <DateTime>(); foreach (var dt in dateTimes) { //generate a dt per each dt and each given hour output.AddRange(rule.ByMinutes .Select(minute => new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, minute, dt.Second))); } return(output.ApplyBySecond(rule)); }
//TODO: Ver Adriano /// <summary> /// Expand the dates dependending on the FREQ and the INTERVAL /// of the property. /// </summary> /// <param name="dateTime"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyFrequency(this DateTime dateTime, Recur rule) { //limit the COunt and Ultil if are not specified var count = rule.Count ?? 1000; var until = rule.Until ?? dateTime.AddYears(10); var output = new List <DateTime> { dateTime }; var genDTs = new List <DateTime>(); var freq = rule.Frequency.Value; var interval = rule.Interval ?? 1; //gonna create as dates as the count specify for (var i = 0; i < count - 1; i++) { //take the last added item and work with it var lastestDate = output.Last(); //if reach the max date the return if (lastestDate >= until) { output.RemoveAt(output.Count - 1); break; } switch (freq) { case RecurValues.Frequencies.DAILY: output.Add(lastestDate.AddDays(interval)); break; case RecurValues.Frequencies.WEEKLY: output.Add(lastestDate.AddDays(7 * interval)); break; case RecurValues.Frequencies.MONTHLY: output.Add(lastestDate.AddMonths(interval)); break; case RecurValues.Frequencies.YEARLY: output.Add(lastestDate.AddYears(interval)); break; case RecurValues.Frequencies.HOURLY: output.Add(lastestDate.AddHours(interval)); break; case RecurValues.Frequencies.MINUTELY: output.Add(lastestDate.AddMinutes(interval)); break; case RecurValues.Frequencies.SECONDLY: output.Add(lastestDate.AddSeconds(interval)); break; } } var result = output.ApplyByMonth(rule); //remove the datetimes before the DTSTART result = result.Where(x => x >= dateTime); //apply the last evaluations //the number of item have to be the first COUNT item result = result.Take(count); //the dts have to be less than the UNTIL value return(result.Where(x => x <= until)); }
public static void Main(string[] args) { /********************* Post Request Variables ********************************/ string host = "esqa.moneris.com"; string store_id = "store5"; string api_token = "yesguy"; /********************* Transactional Variables *******************************/ string order_id = "Need_Unique_Order_ID"; string amount = "10.00"; string pan = "4242424242424242"; string expiry_date = "0812"; string crypt = "7"; /************************* Recur Variables **********************************/ string recur_unit = "month"; //eom = end of month string start_now = "true"; string start_date = "2006/07/28"; string num_recurs = "12"; string period = "1"; string recur_amount = "30.00"; /************************* Recur Object Option1 ******************************/ Recur recurring_cycle = new Recur (recur_unit, start_now, start_date, num_recurs, period, recur_amount); /************************* Recur Object Option2 ******************************/ Hashtable recur_hash = new Hashtable(); recur_hash.Add ("recur_unit", recur_unit); recur_hash.Add ("start_now", start_now); recur_hash.Add ("start_date", start_date); recur_hash.Add ("num_recurs", num_recurs); recur_hash.Add ("period", period); recur_hash.Add ("recur_amount", recur_amount); Recur recurring_cycle2 = new Recur (recur_hash); /************************ Transactional Object *******************************/ Purchase purchase = new Purchase (order_id, amount, pan, expiry_date, crypt); /******************************* Set Recur ***********************************/ purchase.SetRecur (recurring_cycle); /**************************** Https Post Request ***************************/ HttpsPostRequest mpgReq = new HttpsPostRequest(host, store_id, api_token, purchase); /******************************* Receipt ***********************************/ try { Receipt receipt = mpgReq.GetReceipt(); Console.WriteLine("CardType = " + receipt.GetCardType()); Console.WriteLine("TransAmount = " + receipt.GetTransAmount()); Console.WriteLine("TxnNumber = " + receipt.GetTxnNumber()); Console.WriteLine("ReceiptId = " + receipt.GetReceiptId()); Console.WriteLine("TransType = " + receipt.GetTransType()); Console.WriteLine("ReferenceNum = " + receipt.GetReferenceNum()); Console.WriteLine("ResponseCode = " + receipt.GetResponseCode()); Console.WriteLine("ISO = " + receipt.GetISO()); Console.WriteLine("BankTotals = " + receipt.GetBankTotals()); Console.WriteLine("Message = " + receipt.GetMessage()); Console.WriteLine("AuthCode = " + receipt.GetAuthCode()); Console.WriteLine("Complete = " + receipt.GetComplete()); Console.WriteLine("TransDate = " + receipt.GetTransDate()); Console.WriteLine("TransTime = " + receipt.GetTransTime()); Console.WriteLine("Ticket = " + receipt.GetTicket()); Console.WriteLine("TimedOut = " + receipt.GetTimedOut()); Console.WriteLine("Recur Success = " + receipt.GetRecurSuccess()); Console.WriteLine("IsVisaDebit = " + receipt.GetIsVisaDebit()); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// Expand the dates to the given months /// in BYMONTH if FREQ=YEARLY, otherwise /// limit the dates to the given months /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByMonth(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByMonth == null) { return(dateTimes.ApplyByWeekNo(rule)); } /* List<DateTime> daysOfMonths = new List<DateTime>(); */ var cal = CultureInfo.InvariantCulture.Calendar; var output = new List <DateTime>(); //generate all the days for the given months //if the FREQ rule is YEARLY if (rule.Frequency.Value == RecurValues.Frequencies.YEARLY) { foreach (var dt in dateTimes) { foreach (var month in rule.ByMonth) { var dateToAdd = new DateTime(dt.Year, month, dt.Day, dt.Hour, dt.Minute, dt.Second); output.Add(dateToAdd); } } return(output.ApplyByWeekNo(rule)); } //limit the dateTimes to those that have the month //equal to any of the given months if the FREQ is not YEARLY return(dateTimes.Where(x => rule.ByMonth.Contains(x.Month)).ApplyByWeekNo(rule)); }
public static void Main(string[] args) { string host = "esplusqa.moneris.com"; string store_id = "monusqa002"; string api_token = "qatoken"; string data_key = "1sZH2p215HdQV6l6909x217"; string order_id = "res_puchase_ach_3"; string amount = "1.00"; string cust_id = "customer1"; USResPurchaseAch usResPurchaseAch = new USResPurchaseAch(data_key, order_id, cust_id, amount); /************************* Recur Variables **********************************/ string recur_unit = "month"; string start_now = "true"; string start_date = "2008/12/01"; string num_recurs = "12"; string period = "1"; string recur_amount = "30.00"; /************************* Recur Object Option1 ******************************/ Recur recurring_cycle = new Recur(recur_unit, start_now, start_date, num_recurs, period, recur_amount); usResPurchaseAch.SetRecur(recurring_cycle); HttpsPostRequest mpgReq = new HttpsPostRequest(host, store_id, api_token, usResPurchaseAch); /********************** REQUEST ************************/ try { Receipt receipt = mpgReq.GetReceipt(); Console.WriteLine("DataKey = " + receipt.GetDataKey()); Console.WriteLine("ReceiptId = " + receipt.GetReceiptId()); Console.WriteLine("ReferenceNum = " + receipt.GetReferenceNum()); Console.WriteLine("ResponseCode = " + receipt.GetResponseCode()); Console.WriteLine("AuthCode = " + receipt.GetAuthCode()); Console.WriteLine("Message = " + receipt.GetMessage()); Console.WriteLine("TransDate = " + receipt.GetTransDate()); Console.WriteLine("TransTime = " + receipt.GetTransTime()); Console.WriteLine("TransType = " + receipt.GetTransType()); Console.WriteLine("Complete = " + receipt.GetComplete()); Console.WriteLine("TransAmount = " + receipt.GetTransAmount()); Console.WriteLine("CardType = " + receipt.GetCardType()); Console.WriteLine("TxnNumber = " + receipt.GetTxnNumber()); Console.WriteLine("TimedOut = " + receipt.GetTimedOut()); Console.WriteLine("ResSuccess = " + receipt.GetResSuccess()); Console.WriteLine("PaymentType = " + receipt.GetPaymentType()); //ResolveData Console.WriteLine("\nCust ID = " + receipt.GetResDataCustId()); Console.WriteLine("Phone = " + receipt.GetResDataPhone()); Console.WriteLine("Email = " + receipt.GetResDataEmail()); Console.WriteLine("Note = " + receipt.GetResDataNote()); Console.WriteLine("Sec = " + receipt.GetResDataSec()); Console.WriteLine("Cust First Name = " + receipt.GetResDataCustFirstName()); Console.WriteLine("Cust Last Name = " + receipt.GetResDataCustLastName()); Console.WriteLine("Cust Address 1 = " + receipt.GetResDataCustAddress1()); Console.WriteLine("Cust Address 2 = " + receipt.GetResDataCustAddress2()); Console.WriteLine("Cust City = " + receipt.GetResDataCustCity()); Console.WriteLine("Cust State = " + receipt.GetResDataCustState()); Console.WriteLine("Cust Zip = " + receipt.GetResDataCustZip()); Console.WriteLine("Routing Num = " + receipt.GetResDataRoutingNum()); Console.WriteLine("Masked Account Num = " + receipt.GetResDataMaskedAccountNum()); Console.WriteLine("Check Num = " + receipt.GetResDataCheckNum()); Console.WriteLine("Account Type = " + receipt.GetResDataAccountType()); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// Return all days in the month that its /// DayOfWeek is contained in the BYDAY attribute and /// its number os ocurrence in the month is the especified /// in the values(i.e: BYDAY=1MO,-1MO). /// </summary> /// <param name="dt"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> SpecialExpandMonthDayWithInt(this DateTime dt, Recur rule) { var cal = CultureInfo.InvariantCulture.Calendar; var daysOfMonth = cal.GetDaysInMonth(dt.Year, dt.Month); var daysOfWeek = rule.ByDays; var output = new List <DateTime>(daysOfMonth); //Contains the ocurrence number of the DayOfWeek of the especific datetime var dayOfWeekOcurrence = new Dictionary <DateTime, int>(); //Contains the count of ocurrences in the month of the DayOfWeek key var daysOfWeekCount = new Dictionary <DayOfWeek, int>(7) { { DayOfWeek.Sunday, 0 }, { DayOfWeek.Monday, 0 }, { DayOfWeek.Tuesday, 0 }, { DayOfWeek.Wednesday, 0 }, { DayOfWeek.Thursday, 0 }, { DayOfWeek.Friday, 0 }, { DayOfWeek.Saturday, 0 } }; for (var day = 1; day <= daysOfMonth; day++) { //initialize the dict that contains the DayOfWeeks count //and the ocurrence number in the month of that value var dtToAdd = new DateTime(dt.Year, dt.Month, day, dt.Hour, dt.Minute, dt.Second); dayOfWeekOcurrence.Add(dtToAdd, daysOfWeekCount[dtToAdd.DayOfWeek] + 1); daysOfWeekCount[dtToAdd.DayOfWeek] += 1; } //iterate over the datetimes and see if its DayOfWeek //is one of the given in the rule.BYDAY foreach (var dateTime in dayOfWeekOcurrence.Keys) { foreach (var wDay in daysOfWeek) { //if the wDay integer is positive and is the same of the current dateTime //and its DayOfWeek is the same of wDay then add it if (wDay.OrdDay.Value > 0) { if (dateTime.DayOfWeek == wDay.DayOfWeek && dayOfWeekOcurrence[dateTime] == wDay.OrdDay.Value) { output.Add(dateTime); } } //if is negative and the occurrence of the DayOfWeek value //match with one of the specified in BYDAY else if (dateTime.DayOfWeek == wDay.DayOfWeek && daysOfWeekCount[dateTime.DayOfWeek] - dayOfWeekOcurrence[dateTime] + 1 == wDay.OrdDay.Value * -1) { output.Add(dateTime); } } } return(output); }
/// <summary> /// /Expand the dates if FREQ=YEARLY or MONTHLY. /// Do nothing if FREQ=WEEKLY /// Limit otherwise. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyByMonthDay(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.ByMonthDay == null || rule.Frequency.Value == RecurValues.Frequencies.WEEKLY) { return(dateTimes.ApplyByDay(rule)); } var cal = CultureInfo.InvariantCulture.Calendar; //limit the dateTImes if the FREQ is set to SECONDLY, MINUTELY or HOURLY or DAYLY if (rule.Frequency.Value != RecurValues.Frequencies.MONTHLY && rule.Frequency.Value != RecurValues.Frequencies.YEARLY) { return(dateTimes.Where(dateTime => { //if the givens ByMonthDay are negative then //subtract it to the total days of the month var tempDays = rule.ByMonthDay.Select(dayOfMonth => { //if the day is positive dont do nothing if (dayOfMonth > 0) { return dayOfMonth; } //if the day is negative then substract it to the //count of days in the month var daysInMonth = cal.GetDaysInMonth(dateTime.Year, dateTime.Month); var day = daysInMonth + dayOfMonth; //if the result day is not in the range of the month then dismiss it if (day < 0 || day > daysInMonth) { return -1; } return day; }); return tempDays.Contains(dateTime.Day); }).ApplyByDay(rule)); } //if the FREQ is MONTHLY or YEARLY then expand var output = new List <DateTime>(); foreach (var dateTime in dateTimes) { var daysInMonth = cal.GetDaysInMonth(dateTime.Year, dateTime.Month); //if the givens ByMonthDay are negative then //subtract it to the total days of the month var tempDays = rule.ByMonthDay.Select(dayOfMonth => { //if the day is positive dont do nothing if (dayOfMonth > 0) { return(dayOfMonth); } //if the day is negative then substract it to the //count of days in the month var day = daysInMonth + dayOfMonth + 1; //if the result day is not in the range of the month then dismiss it if (day < 0) { return(-1); } return(day); }).Where(x => x >= 0 && x < daysInMonth); output.AddRange(tempDays.Select(day => new DateTime(dateTime.Year, dateTime.Month, day, dateTime.Hour, dateTime.Minute, dateTime.Second))); } return(output.ApplyByDay(rule)); }
//TODO:IMplement this!!! /// <summary> /// Limit the recurrence number specified in the BYSETPOS attribute. /// Isnt implemented yet till I know more about it. /// </summary> /// <param name="dateTimes"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ApplyBySetPos(this IEnumerable <DateTime> dateTimes, Recur rule) { if (rule.BySetPos == null) { return(dateTimes); } throw new NotImplementedException("THe rule isnt implemented yet :(."); }
/// <summary> /// Return all the days of the month that its /// DayOfWeek is contained in the specified BYDAY when these contains /// ordinary values (i.e: BYDAY=1MO,-1MO). /// </summary> /// <param name="dt"></param> /// <param name="rule"></param> /// <returns></returns> private static IEnumerable <DateTime> ExpandYearByDay(this DateTime dt, Recur rule) { var cal = CultureInfo.InvariantCulture.Calendar; var daysOfYear = cal.GetDaysInYear(dt.Year); var daysOfWeek = rule.ByDays; var output = new List <DateTime>(); //Contains the ocurrence number of the DayOfWeek of the especific datetime var dayOfWeekOcurrence = new Dictionary <DateTime, int>(); //Contains the count of ocurrence of the DayOfWeek var daysOfWeekCount = new Dictionary <DayOfWeek, int>(7) { { DayOfWeek.Sunday, 0 }, { DayOfWeek.Monday, 0 }, { DayOfWeek.Tuesday, 0 }, { DayOfWeek.Wednesday, 0 }, { DayOfWeek.Thursday, 0 }, { DayOfWeek.Friday, 0 }, { DayOfWeek.Saturday, 0 } }; var yearStartDate = new DateTime(dt.Year, 1, 1, dt.Hour, dt.Minute, dt.Second); var currentDate = yearStartDate; for (var days = 0; days < daysOfYear; days++) { //construct the datetime and check if the day of the week of one //of the specified in the BYDAY property currentDate = yearStartDate.AddDays(days); dayOfWeekOcurrence.Add(currentDate, daysOfWeekCount[currentDate.DayOfWeek] + 1); daysOfWeekCount[currentDate.DayOfWeek] += 1; } //iterate over the datetimes and see if its DayOfWeek //is one of the given in the rule.BYDAY foreach (var dateTime in dayOfWeekOcurrence.Keys) { foreach (var wDay in daysOfWeek) { //if the wDay integer is positive and is the same of the current dateTime //and its DayOfWeek is the same of wDay then add it if (wDay.OrdDay.Value > 0) { if (dateTime.DayOfWeek == wDay.DayOfWeek && dayOfWeekOcurrence[dateTime] == wDay.OrdDay.Value) { output.Add(dateTime); } else { continue; } } //if is negative and the total count of datetime.DayOfWeek else if (dateTime.DayOfWeek == wDay.DayOfWeek && daysOfWeekCount[dateTime.DayOfWeek] - dayOfWeekOcurrence[dateTime] + 1 == wDay.OrdDay.Value * -1) { output.Add(dateTime); } } } return(output); }