示例#1
0
        public ActionResult MyRecords()
        {
            List <Reception> receptions;

            using (var db = new NetworkHairdressingContext())
            {
                db.Employees.ToList();
                db.Prices.ToList();

                var userId = User.Identity.GetUserId();
                if (string.IsNullOrEmpty(userId))
                {
                    return(HttpNotFound());
                }

                receptions = new List <Reception>(db.Receptions.Where(x => x.AspNetUsersId == userId).ToList());
            }

            return(View(receptions));
        }
        public async Task Execute(IJobExecutionContext context)
        {
            if (DateTime.Now.Day == 1)
            {
                using (var db = new NetworkHairdressingContext())
                {
                    var currendDate = DateTime.Now.AddMonths(1);
                    var days        = DateTime.DaysInMonth(currendDate.Year, currendDate.Month);

                    var previewDate = currendDate.AddMonths(-1);
                    var previewName = string.Join(string.Empty, previewDate.Month.ToString(), "-",
                                                  previewDate.Year.ToString(), ".tmp");

                    var previewTimeSheet   = db.TimeSheets.FirstOrDefault(x => x.Name.Contains(previewName));
                    var employeeDictionary = new Dictionary <Employee, int>();

                    if (previewTimeSheet != null)
                    {
                        var previewFile         = previewTimeSheet.File;
                        var previewTempFileName = Path.GetTempFileName();

                        using (var stream = new FileStream(previewTempFileName, FileMode.Create))
                        {
                            stream.Write(previewFile, 0, previewFile.Length);
                        }

                        using (var sr = new StreamReader(previewTempFileName, Encoding.GetEncoding(1251)))
                        {
                            var line = sr.ReadLine();
                            while ((line = sr.ReadLine()) != null)
                            {
                                var lengthEmployeeId = line.IndexOf(';');
                                var preEmployeeId    = int.Parse(line.Substring(0, lengthEmployeeId));
                                var preEmployee      = db.Employees.First(x => x.Id == preEmployeeId);

                                if (preEmployee.BarbershopId != 3)
                                {
                                    continue;
                                }

                                var preCounter = 0;
                                var preLastDay = line.Substring(line.Length - 4, 1);
                                var lastDay    = line.Substring(line.Length - 2, 1);

                                switch (preLastDay)
                                {
                                case "в" when lastDay == "р":
                                    preCounter = 1;
                                    break;

                                case "р" when lastDay == "в":
                                    preCounter = -1;
                                    break;

                                case "р" when lastDay == "р":
                                    preCounter = -2;
                                    break;
                                }

                                employeeDictionary.Add(preEmployee, preCounter);
                            }
                        }
                    }

                    var path = Path.GetTempFileName();

                    var file         = new FileStream(path, FileMode.Append);
                    var streamWriter = new StreamWriter(file, Encoding.GetEncoding(1251));

                    streamWriter.Write(";");
                    for (var i = 1; i <= days; i++)
                    {
                        streamWriter.Write(string.Join(string.Empty, i, ";"));
                    }

                    streamWriter.WriteLine();

                    foreach (var employee in db.Employees.OrderBy(x => x.BarbershopId))
                    {
                        streamWriter.Write(string.Join(string.Empty, employee.Id, ";"));

                        var counter = 0;
                        if (employeeDictionary.ContainsKey(employee))
                        {
                            counter = employeeDictionary[employee];
                        }

                        for (var i = 0; i < days; i++)
                        {
                            var dayDate = new DateTime(currendDate.Year, currendDate.Month, i + 1);
                            if (employee.BarbershopId != 3)
                            {
                                streamWriter.Write(dayDate.DayOfWeek == DayOfWeek.Sunday
                                    ? string.Join(string.Empty, "в", ";")
                                    : string.Join(string.Empty, "р", ";"));
                            }
                            else
                            {
                                if (counter < 2 && counter >= 0)
                                {
                                    streamWriter.Write(string.Join(string.Empty, "р", ";"));
                                }
                                else
                                {
                                    streamWriter.Write(string.Join(string.Empty, "в", ";"));
                                    if (counter != -1)
                                    {
                                        counter = -2;
                                    }
                                }
                            }

                            counter++;
                        }

                        streamWriter.WriteLine();
                    }
                    streamWriter.Close();

                    var timeSheetName = string.Join(string.Empty, currendDate.Month.ToString(), "-",
                                                    currendDate.Year.ToString(), ".tmp");
                    var timeSheet = db.TimeSheets.FirstOrDefault(x => x.Name.Contains(timeSheetName));

                    file = new FileStream(path, FileMode.Open);
                    byte[] fileByte = null;
                    using (var binaryReader = new BinaryReader(file))
                    {
                        fileByte = binaryReader.ReadBytes((int)file.Length);
                    }

                    if (timeSheet != null)
                    {
                        timeSheet.File = fileByte;
                    }
                    else
                    {
                        timeSheet = new TimeSheet
                        {
                            Name = timeSheetName,
                            File = fileByte
                        };
                        db.TimeSheets.Add(timeSheet);
                    }

                    await db.SaveChangesAsync();
                }
            }
        }
示例#3
0
        public ActionResult Record(string barbershop, string employee, string price, Reception reception)
        {
            if (reception.DateTime.Hour < 8 || reception.DateTime.Hour > 19)
            {
                ViewBag.Error = "Парикмахерская работает с 8 до 20. Укажите другое время";
                return(View(LoadRecordModel()));
            }

            var employeeId      = int.Parse(employee);
            var currentEmployee = _db.Employees.First(x => x.Id == employeeId);

            if (reception.DateTime.DayOfWeek == DayOfWeek.Sunday && currentEmployee.BarbershopId != 3)
            {
                ViewBag.Error = "Парикмахерская не работает в воскресенье. Пожалуйста, выберите другой день или 3 парикмахерскую.";
                return(View(LoadRecordModel()));
            }
            else if (reception.DateTime.DayOfWeek == DayOfWeek.Sunday && currentEmployee.BarbershopId == 3 && reception.DateTime.Hour > 17)
            {
                ViewBag.Error = "Парикмахерская работает с 8 до 18. Укажите другое время";
                return(View(LoadRecordModel()));
            }

            if (currentEmployee.BarbershopId == 3)
            {
                var receptionDay  = reception.DateTime.Day;
                var currendDate   = DateTime.Now;
                var nameTimeSheet = string.Join(string.Empty, currendDate.Month, "-", currendDate.Year);

                var timeSheet = _db.TimeSheets.First(x => x.Name.Contains(nameTimeSheet));

                var timeSheetFile = timeSheet.File;
                var tempFileName  = Path.GetTempFileName();

                using (var stream = new FileStream(tempFileName, FileMode.Create))
                {
                    stream.Write(timeSheetFile, 0, timeSheetFile.Length);
                }

                using (var sr = new StreamReader(tempFileName, Encoding.GetEncoding(1251)))
                {
                    var line = sr.ReadLine();
                    while ((line = sr.ReadLine()) != null)
                    {
                        var strEmployeeId = line.Substring(0, line.IndexOf(';'));
                        if (int.Parse(strEmployeeId) != employeeId)
                        {
                            continue;
                        }

                        line = line.Replace(string.Join(string.Empty, strEmployeeId, ";"), string.Empty);

                        for (var i = 0; i < line.Split(';').Length; i++)
                        {
                            if (i + 1 != receptionDay)
                            {
                                continue;
                            }

                            var jobStatus = line.Split(';')[i];
                            if (jobStatus.Contains('о'))
                            {
                                ViewBag.Error = "Парикмахер в отпуске.";
                                return(View(LoadRecordModel()));
                            }
                            else if (jobStatus.Contains('у'))
                            {
                                ViewBag.Error = "Парикмахер уволен.";
                                return(View(LoadRecordModel()));
                            }
                            else if (jobStatus.Contains('б'))
                            {
                                ViewBag.Error = "Парикмахер на больничном.";
                                return(View(LoadRecordModel()));
                            }
                            else if (jobStatus.Contains('в'))
                            {
                                ViewBag.Error = "Парикмахер на выходном.";
                                return(View(LoadRecordModel()));
                            }
                        }
                    }
                }
            }

            var priceId = int.Parse(price);

            reception.PriceId = priceId;
            reception.Price   = _db.Prices.First(x => x.Id == priceId);

            var success     = true;
            var timeOfWorks = "К парихмахеру записаны:";
            List <Reception> listSelecteDayReception;

            using (var db = new NetworkHairdressingContext())
            {
                listSelecteDayReception = new List <Reception>(db.Receptions.Where(x =>
                                                                                   x.DateTime.Day == reception.DateTime.Day &&
                                                                                   x.DateTime.Month == reception.DateTime.Month &&
                                                                                   x.DateTime.Year == reception.DateTime.Year &&
                                                                                   x.EmployeeId == employeeId).OrderBy(x => x.DateTime).ToList());
            }

            foreach (var item in listSelecteDayReception)
            {
                var itemPriceDuration      = _db.Prices.First(x => x.Id == item.PriceId).Duration;
                var receptionPriceDuration = _db.Prices.First(x => x.Id == reception.PriceId).Duration;

                var startTime = item.DateTime;
                var endTime   = item.DateTime.AddMinutes(itemPriceDuration);

                if (reception.DateTime < endTime && startTime < reception.DateTime.AddMinutes(receptionPriceDuration))
                {
                    success = false;
                }

                timeOfWorks = string.Join(" ", timeOfWorks, "\n\tс ", startTime.ToShortTimeString(), " до ",
                                          endTime.ToShortTimeString(), "\n");
            }

            if (!success)
            {
                ViewBag.Error = string.Join(" ", timeOfWorks, "Ваша услуга длится ", reception.Price.Duration, " минут.");
                return(View(LoadRecordModel()));
            }

            var dbReception = new Reception
            {
                DateTime      = reception.DateTime,
                AspNetUsersId = User.Identity.GetUserId(),
                EmployeeId    = currentEmployee.Id,
                PriceId       = priceId
            };

            _db.Receptions.Add(dbReception);
            _db.SaveChanges();

            ViewBag.Success = "Вы успешно записались!";

            return(RedirectToAction("Record"));
        }