static void Main() { CalcDate calcDate1 = new CalcDate(DateTime.Today); CalcDate calcDate2 = new CalcDate(2021, 5); Console.WriteLine(calcDate1.CountWeekDays()); Console.WriteLine(calcDate2.CountWeekDays()); }
public VirtualMidNightList(Person _person, bool endOfDayIsForce, DateTime calcFromDate, DateTime calcToDate, IList <AssignedRuleParameter> ruleParameterList) { try { RuleParameterList = ruleParameterList; this.CalcFromDate = calcFromDate; this.CalcToDate = calcToDate; this.person = _person; EndOfDayIsForce = endOfDayIsForce; //{ // AssignedWGDShift assignWGD = (AssignedWGDShift)_person.GetShiftByDate(_person.CalcDateZone.FromDate); // if (assignWGD.Pairs.Count > 0) // { // ShiftPair fSpwd = assignWGD.Pairs.OrderBy(x => x.From).First(); // ShiftPair lSpwd = assignWGD.Pairs.OrderBy(x => x.From).Last(); // decimal lAfterTelorance = 0;// lSpwd.AfterTolerance; // int to = lSpwd.To + (int)lAfterTelorance; // if (to > DayMinutes) // { // to -= DayMinutes; // } // VirtualMidNight vmn = new VirtualMidNight(assignWGD.Date, to, fSpwd.BeforeTolerance, lSpwd.AfterTolerance); // _vmnList.Add(vmn); // } //} MidNightTimeSt midNightTime = this.GetMidNightTime(_person.CalcDateZone.FromDate); MidNightTimeSt beforeMidNight = new MidNightTimeSt() { Start = -1 }; MidNightTimeSt lastMidNight = null; foreach (DateTime CalcDate in _person.CalcDateZone) { try { beforeMidNight = midNightTime; midNightTime = this.GetMidNightTime(CalcDate); AssignedWGDShift tomorrowShift = (AssignedWGDShift)_person.GetShiftByDate(CalcDate.AddDays(1)); AssignedWGDShift todayShift = (AssignedWGDShift)_person.GetShiftByDate(CalcDate); if (todayShift.Pairs.Count > 0) { lastMidNight = (MidNightTimeSt)midNightTime.Clone(); //جلوگیری از تداخل نیمه شبهای مجازی شیفتهای متوالی //در حالت اول شبانه روز اول محدود میشود و در حالت دوم شبانه روز دوم را محدود میکنیم //مثال حالت اول مانند وقتی که روز اول دارای شیفت 23:50 تا +7:00 با پایان شبانه روز 20:00 باشد و روز دوم دارای شیفت 7:00 تا 17:00 با پایان شبانه روز 6:00 باشد //مثال حالت دوم مانند وقتی که روز اول دارای شیفت 7:00 تا +7:00 با پایان شبانه روز 7:00 باشد و روز دوم دارای شیفت 7:00 تا 17:00 با پایان شبانه روز 6:00 باشد // فرض بر این است که حالت دوم تنها در هنگام شیفت 24 ساعته بروز میکند و باید "تا" پایان شبانه روز شیفت مقدار بگیرد - در مثال بالا +7:00 میباشد if (beforeMidNight.Start > midNightTime.Start && (beforeMidNight.End - DayMinutes) < midNightTime.Start) { VirtualMidNight lastVmn = _vmnList.Last(); lastVmn.SecondMidLimit = midNightTime.Start - 1; } else if (beforeMidNight.Start > midNightTime.Start) { int end = beforeMidNight.End; if (end > DayMinutes) { end -= DayMinutes; } midNightTime.Start = end + 1; } VirtualMidNight vmn = GetMidNightOFShift(todayShift, midNightTime); _vmnList.Add(vmn); } else { //این بلاک بجای قسمت مربوط به درج نیمه شب در تعطیلات اضافه گردید VirtualMidNight vmn = new VirtualMidNight(); if (lastMidNight != null)//استفاده از روزهای قبل که شیفت داشته است و عدم استفاده از قانون پایان شبانه روز { vmn = new VirtualMidNight(CalcDate, lastMidNight.Start, lastMidNight.BeforeTelorance, lastMidNight.AfterTelorance); } else { vmn = new VirtualMidNight(CalcDate, midNightTime.Start, midNightTime.BeforeTelorance, midNightTime.AfterTelorance); } _vmnList.Add(vmn); //فقط وقتی بکار میآید که در روزهای متوالی شیفت داشته باشیم if (beforeMidNight.Start > 0) { midNightTime = (MidNightTimeSt)beforeMidNight.Clone(); } beforeMidNight.Start = -1; } } catch (Exception ex) { throw ex; } } //افزودن نیمه شب مجازی برای روزهایی که شیفت نداشته است //از 10 روز قبل شروع میکنیم تا برای اولین ترددها مشکلی ایجاد نشود #region without shift days if (_vmnList.Count > 0) { VirtualMidNight lastVmn = new VirtualMidNight(); _vmnList = _vmnList.OrderBy(x => x.DateTime).ToList(); DateTime startDate = _vmnList.First().Date.AddDays(-10); DateTime endDate = _vmnList.OrderBy(x => x.Date).Last().Date; for (DateTime dateCounter = startDate; dateCounter < endDate; dateCounter = dateCounter.AddDays(1)) { try { if (!_vmnList.Any(x => x.Date == dateCounter.Date)) { // VirtualMidNight vmn = new VirtualMidNight(dateCounter, midNightTime); //اگر روزی شیفت نداشت ما باید نیمه شب مجازی اضافه کنیم که همان روز را پوشش دهد(نیمه دوم )در //مورد مکان های مشترک اگر شخص در حال ورود بود باید نیمه شب مجازی دوم و اگر در حال خروج بود //باید نیمه شب مجازی اول به ان تعلق گیرد VirtualMidNight vmn = new VirtualMidNight(); if (_vmnList.Any(x => x.Date == dateCounter.Date.AddDays(1)) && _vmnList.Any(x => x.Date == dateCounter.Date.AddDays(-1)) && _vmnList.Where(x => x.Date == dateCounter.Date.AddDays(1)).First().Time == _vmnList.Where(x => x.Date == dateCounter.Date.AddDays(-1)).First().Time) { lastVmn = lastVmn = _vmnList.Where(x => x.Date == dateCounter.Date.AddDays(1)).First(); vmn = new VirtualMidNight(dateCounter, lastVmn.Time, lastVmn.BeforeTelorance, lastVmn.AfterTelorance); } if (_vmnList.Any(x => x.Date == dateCounter.Date.AddDays(-1))) { lastVmn = _vmnList.Where(x => x.Date == dateCounter.Date.AddDays(-1)).First(); vmn = new VirtualMidNight(dateCounter, lastVmn.Time, lastVmn.BeforeTelorance, lastVmn.AfterTelorance); } else { vmn = new VirtualMidNight(dateCounter, midNightTime.Start, midNightTime.BeforeTelorance, midNightTime.AfterTelorance); lastVmn = vmn; } _vmnList.Add(vmn); } } catch (Exception ex) { throw ex; } } _vmnList = _vmnList.OrderBy(x => x.DateTime).ToList(); } #endregion foreach (VirtualMidNight vmn in _vmnList) { vmn.DayPart = GetMainDayRegion(vmn, _person); } } catch (Exception ex) { throw ex; } }
//// POST: api/Collection //public void Post([FromBody]string value) //{ //} // PUT: api/Collection/5 public void Put(int id) { if (id == 1) { //New Collection DBManage MyDBManager = new DBManage(); SqlCommand Command = null; System.Net.Http.Headers.HttpRequestHeaders headers = this.Request.Headers; string userID_AGORASTH = string.Empty; string userID_PWLHTH = string.Empty; string SXOLIO_PWLHTH = string.Empty; string HMEROMHNIA_EKT = string.Empty; string Peridikotita = string.Empty; string POSO = string.Empty; string DOSEIS = string.Empty; int Transaction_ID = 0; int STATUS = 1; //ΕΚΚΡΕΜΕΙ int Days = 0; DateTime CalcDate; if (headers.Contains("userID_AGORASTH")) { userID_AGORASTH = headers.GetValues("userID_AGORASTH").First(); } if (headers.Contains("userID_PWLHTH")) { userID_PWLHTH = headers.GetValues("userID_PWLHTH").First(); } if (headers.Contains("SXOLIO_PWLHTH")) { SXOLIO_PWLHTH = headers.GetValues("SXOLIO_PWLHTH").First(); } if (headers.Contains("POSO")) { POSO = headers.GetValues("POSO").First(); } if (headers.Contains("DOSEIS")) { DOSEIS = headers.GetValues("DOSEIS").First(); } if (headers.Contains("HMEROMHNIA_EKT")) { HMEROMHNIA_EKT = headers.GetValues("HMEROMHNIA_EKT").First(); } if (headers.Contains("Peridikotita")) { Peridikotita = headers.GetValues("Peridikotita").First(); } string SqlString = string.Empty; int RecsAff = 0; SqlString = "i_tefteri_sp_New_Collection"; MyDBManager.CommandTimeOut = 30; MyDBManager.ConStr = Constr(); try { switch (Peridikotita) { case "κάθε μήνα": Days = 30; break; case "κάθε δυο μήνες": Days = 60; break; case "κάθε τρεις μήνες": Days = 90; break; case "κάθε τέσσερις μήνες": Days = 120; break; case "κάθε εξάμηνο": Days = 180; break; case "κάθε έτος": Days = 365; break; } MyDBManager.ConOpen(); Command = new SqlCommand(); Command.CommandText = SqlString; Command.CommandType = System.Data.CommandType.StoredProcedure; Command.Parameters.Add("@userID_AGORASTH", SqlDbType.Int); Command.Parameters.Add("@userID_PWLHTH", SqlDbType.Int); Command.Parameters.Add("@SXOLIO_PWLHTH", SqlDbType.NVarChar); Command.Parameters.Add("@POSO", SqlDbType.Money); Command.Parameters.Add("@DOSEIS", SqlDbType.Int); Command.Parameters.Add("@STATUS", SqlDbType.Int); Command.Parameters.Add("@Transaction_id", SqlDbType.BigInt); Command.Parameters["@Transaction_id"].Direction = ParameterDirection.Output; Command.Parameters["@userID_AGORASTH"].Value = userID_AGORASTH; Command.Parameters["@userID_PWLHTH"].Value = userID_PWLHTH; Command.Parameters["@SXOLIO_PWLHTH"].Value = SXOLIO_PWLHTH; Command.Parameters["@POSO"].Value = Convert.ToDouble(POSO); Command.Parameters["@DOSEIS"].Value = DOSEIS; Command.Parameters["@STATUS"].Value = STATUS; RecsAff = MyDBManager.ExecuteCommand(Command); Transaction_ID = Convert.ToInt32(Command.Parameters["@Transaction_id"].Value.ToString()); SqlString = "i_tefteri_sp_New_Collection_DOSH"; CalcDate = DateTime.Parse(HMEROMHNIA_EKT); System.TimeSpan duration = new System.TimeSpan(Days, 0, 0, 0); for (int i = 1; i <= Convert.ToInt32(DOSEIS); i++) { Command = null; Command = new SqlCommand(); Command.CommandText = SqlString; Command.CommandType = System.Data.CommandType.StoredProcedure; Command.Parameters.Add("@TransactionID", SqlDbType.BigInt); Command.Parameters.Add("@HMEROMHNIA_EKT", SqlDbType.Date); Command.Parameters.Add("@POSO", SqlDbType.Money); Command.Parameters["@TransactionID"].Value = Transaction_ID; Command.Parameters["@HMEROMHNIA_EKT"].Value = CalcDate; Command.Parameters["@POSO"].Value = Math.Round(Convert.ToDouble(POSO) / Convert.ToInt32(DOSEIS), 2); RecsAff = MyDBManager.ExecuteCommand(Command); CalcDate = CalcDate.Add(duration); } Write2LogFile(MyDBManager, "Controller=Collection, " + "New_Collection", 2); } catch (Exception ex) { RecsAff = Write2LogFile(MyDBManager, "Controller=Collection, " + "Error: " + ex.Message, 2); MyDBManager.ConClose(); MyDBManager = null; } } else if (id == 2) //Update Collection { DBManage MyDBManager = new DBManage(); SqlCommand Command = null; System.Net.Http.Headers.HttpRequestHeaders headers = this.Request.Headers; string Transaction_id = String.Empty; string SXOLIO_AGORASTH = string.Empty; int STATUS = 2; //ΕΓΚΡΙΘΗΚΕ ΑΠΟ ΑΓΟΡΑΣΤΗ int Days = 0; DateTime CalcDate; if (headers.Contains("Transaction_id")) { Transaction_id = headers.GetValues("Transaction_id").First(); } if (headers.Contains("SXOLIO_AGORASTH")) { SXOLIO_AGORASTH = headers.GetValues("SXOLIO_AGORASTH").First(); } string SqlString = string.Empty; int RecsAff = 0; SqlString = "i_tefteri_sp_Update_Collection"; MyDBManager.CommandTimeOut = 30; MyDBManager.ConStr = Constr(); try { MyDBManager.ConOpen(); Command = new SqlCommand(); Command.CommandText = SqlString; Command.CommandType = System.Data.CommandType.StoredProcedure; Command.Parameters.Add("@Transaction_id", SqlDbType.BigInt); Command.Parameters.Add("@SXOLIO_AGORASTH", SqlDbType.NVarChar); Command.Parameters["@Transaction_id"].Value = Transaction_id; Command.Parameters["@SXOLIO_AGORASTH"].Value = SXOLIO_AGORASTH; RecsAff = MyDBManager.ExecuteCommand(Command); Write2LogFile(MyDBManager, "Controller=Collection, " + "Update_Collection", 2); } catch (Exception ex) { RecsAff = Write2LogFile(MyDBManager, "Controller=Collection, " + "Error: " + ex.Message, 2); MyDBManager.ConClose(); MyDBManager = null; } } }