Пример #1
0
    static void Main()
    {
        CalcDate calcDate1 = new CalcDate(DateTime.Today);

        CalcDate calcDate2 = new CalcDate(2021, 5);


        Console.WriteLine(calcDate1.CountWeekDays());
        Console.WriteLine(calcDate2.CountWeekDays());
    }
Пример #2
0
        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;
            }
        }
Пример #3
0
        //// 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;
                }
            }
        }