Ejemplo n.º 1
0
        public JsonResult Register(BookModel val)
        {
            string       JsfunctionName = "CalculateReturn";  // dönüşte çalıştırılacak funciton adı parametresi
            OptinalClass _OptinalClass  = new OptinalClass(); // genel kullanım class yapım
            OptinalClass rtrn           = new OptinalClass(); // genel kullanım class yapım
            BookService  _BookService   = new BookService();

            if (Convert.ToDateTime(val.BeginDate) > Convert.ToDateTime(val.EndDate))// false ise return dön
            {
                rtrn.OptinalClass_val = false;
                rtrn.OptinalClass_msg = "Başlangıç Tarihi, Bitiş Tarihinden Büyük Olamaz!";
                return(Json(new { value = true, jqueryFunc = ("" + JsfunctionName + "({'value':'" + rtrn.OptinalClass_val + "','Return':'" + rtrn.OptinalClass_msg + "'})").Replace('\'', '"') })); // code blok burada return döndürsün
            }
            if (val.Country == "0")                                                                                                                                                                 //ülke gelen değer kontrol
            {
                rtrn.OptinalClass_val = false;
                rtrn.OptinalClass_msg = "Ülke Seçiniz!";
                return(Json(new { value = true, jqueryFunc = ("" + JsfunctionName + "({'value':'" + rtrn.OptinalClass_val + "','Return':'" + rtrn.OptinalClass_msg + "'})").Replace('\'', '"') }));// code blok burada return döndürsün
            }
            try
            {
                int.TryParse(val.Country, out int countryID);
                _OptinalClass.OptinalClass_ID = countryID;
                List <WorkDay> _WorkDayList = Tool.AsObjectList <WorkDay>(_BookService.GetWorkDayList(Tool.AsJson(_OptinalClass))); //Service projesinden, db de ülkeye göre tanımlanan çalışma günlerini alıyorum.
                List <Holiday> _Holiday     = _BookService.GetHolidayList(Tool.AsJson(_OptinalClass));                              //Service projesinden, db de ülkeye göre tanımlanan tatil günlerini alıyorum.

                DateTime BeginDate = Convert.ToDateTime(val.BeginDate);
                DateTime EndDate   = Convert.ToDateTime(val.EndDate);

                double TotalDay = (EndDate - BeginDate).TotalDays + 1; //dahil edilen gün sayısı

                int    BookDay    = 0;                                 //çalışma gü sayısı
                int    weekOfDay  = -1;                                // gün, haftanın hangi indexinde(squence)
                bool   isworkDay  = false;                             // çalışma günü mü
                bool   isholiday  = false;                             // tatil günü mü
                float  PenaltyPay = 0;                                 //ceza ücreti
                string Curreny    = "";                                //para birimi
                Curreny = Tool.AsObjectList <Country>(_BookService.GetCountryList()).Where(x => x.ID == countryID).SingleOrDefault().Currency;
                for (int i = 0; i < TotalDay; i++)                     //para birimini alıyorum
                {
                    #region Gün sequnce belirleme
                    weekOfDay = Tool.GetDayOfWeek(BeginDate.AddDays(i));//helper daki tool da, tarih haftanın hangi gününde bilgisini alıyorum.
                    #endregion
                    isworkDay = false;
                    foreach (WorkDay workDay in _WorkDayList) //çalışma günü mü?
                    {
                        if (workDay.DaySequence == weekOfDay) //squence e göre bakıyorum.
                        {
                            isworkDay = true;                 // çalışma günü ise şarta girecek
                            break;
                        }
                    }
                    isholiday = false;
                    foreach (Holiday holiday in _Holiday)// tatile denk geliyor mu?
                    {
                        if (holiday.Date == BeginDate.AddDays(i))
                        {
                            isholiday = true;// tatilse şarta girmicek
                            break;
                        }
                    }
                    if (!isholiday && isworkDay) //tatil değilse ve çalışma günü ise
                    {
                        BookDay++;               // günü 1 arttır.
                    }
                }
                if (BookDay > 10)                                                       // 10 çalışma gününden fazla ise ceza ücretine tabi olacak
                {
                    PenaltyPay = (BookDay - 10) * 5;                                    //hergün 5 para birimi
                }
                rtrn.OptinalClass_msg          = BookDay.ToString();                    // Çalışma gün sayısı
                rtrn.OptinalClass_optional_Msg = PenaltyPay.ToString() + " " + Curreny; // var ise Ceza tutarı
                rtrn.OptinalClass_val          = true;
            }
            catch (Exception ex)
            {
                ErrorSignal.FromCurrentContext().Raise(ex);                                                                                                                                                                                          //Elmah kullanarak olası hataları Db ye loglayacağım.
            }
            return(Json(new { value = true, jqueryFunc = ("" + JsfunctionName + "({'value':'" + rtrn.OptinalClass_val + "','WorkDays':'" + rtrn.OptinalClass_msg + "','Penalty':'" + rtrn.OptinalClass_optional_Msg + "'})").Replace('\'', '"') })); // Json dönerken main.js te tanımladığım form submit fonksiyonu çalıştığından geriye gerekli parametreleri tanımlıyorum.
        }