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(); } } }
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")); }