Complete
This commit is contained in:
parent
76e6ec8bc5
commit
4205b0c052
@ -50,7 +50,7 @@ public class CleaningLogic : ICleaningLogic
|
|||||||
|
|
||||||
public bool Update(CleaningBindingModel model)
|
public bool Update(CleaningBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model, false);
|
||||||
if (_cleaningStorage.Update(model) != null) return true;
|
if (_cleaningStorage.Update(model) != null) return true;
|
||||||
_logger.LogWarning("Update operation failed");
|
_logger.LogWarning("Update operation failed");
|
||||||
return false;
|
return false;
|
||||||
|
@ -40,9 +40,10 @@ public class ReportLogic : IReportLogic
|
|||||||
_saveToPdf = saveToPdf;
|
_saveToPdf = saveToPdf;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReportListCleaningModel> GetListCleaning()
|
public List<ReportListCleaningModel> GetListCleaning(List<int> reservationsId)
|
||||||
{
|
{
|
||||||
var reservations = _reservationStorage.GetFullList();
|
var reservations = _reservationStorage.GetFullList()
|
||||||
|
.Where(x => reservationsId.Contains(x.Id));
|
||||||
List<ReportListCleaningModel> list = new();
|
List<ReportListCleaningModel> list = new();
|
||||||
|
|
||||||
foreach (var reservation in reservations)
|
foreach (var reservation in reservations)
|
||||||
@ -127,7 +128,7 @@ public class ReportLogic : IReportLogic
|
|||||||
{
|
{
|
||||||
FileName = model.FileName,
|
FileName = model.FileName,
|
||||||
Title = "Комплекты для уборки",
|
Title = "Комплекты для уборки",
|
||||||
ListCleaningModels = GetListCleaning()
|
ListCleaningModels = GetListCleaning(model.Reservations)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +138,7 @@ public class ReportLogic : IReportLogic
|
|||||||
{
|
{
|
||||||
FileName = model.FileName,
|
FileName = model.FileName,
|
||||||
Title = "Комплекты для уборки",
|
Title = "Комплекты для уборки",
|
||||||
ListCleaningModels = GetListCleaning()
|
ListCleaningModels = GetListCleaning(model.Reservations)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,4 +5,5 @@ public class ReportBindingModel
|
|||||||
public string FileName { get; set; } = string.Empty;
|
public string FileName { get; set; } = string.Empty;
|
||||||
public DateTime? From { get; set; }
|
public DateTime? From { get; set; }
|
||||||
public DateTime? To { get; set; }
|
public DateTime? To { get; set; }
|
||||||
|
public List<int>? Reservations { get; set; }
|
||||||
}
|
}
|
@ -5,7 +5,7 @@ namespace HotelContracts.BusinessLogicsContracts;
|
|||||||
|
|
||||||
public interface IReportLogic
|
public interface IReportLogic
|
||||||
{
|
{
|
||||||
List<ReportListCleaningModel> GetListCleaning();
|
List<ReportListCleaningModel> GetListCleaning(List<int> reservationsId);
|
||||||
List<ReportGuestViewModel> GetGuests(ReportBindingModel model);
|
List<ReportGuestViewModel> GetGuests(ReportBindingModel model);
|
||||||
void SaveListCleaningToWordFile(ReportBindingModel model);
|
void SaveListCleaningToWordFile(ReportBindingModel model);
|
||||||
void SaveListCleaningToExcelFile(ReportBindingModel model);
|
void SaveListCleaningToExcelFile(ReportBindingModel model);
|
||||||
|
@ -9,4 +9,9 @@ public class ReportGuestViewModel
|
|||||||
public DateTime StartDate { get; set; }
|
public DateTime StartDate { get; set; }
|
||||||
public DateTime EndDate { get; set; }
|
public DateTime EndDate { get; set; }
|
||||||
public Dictionary<int, CleaningInstrumentsViewModel> CleaningInstruments;
|
public Dictionary<int, CleaningInstrumentsViewModel> CleaningInstruments;
|
||||||
|
|
||||||
|
public string GetCleaningInstruments()
|
||||||
|
{
|
||||||
|
return string.Join(", ", CleaningInstruments.Values.Select(x => x.Type));
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,7 +3,6 @@ using HotelBusinessLogic.MailWorker;
|
|||||||
using HotelContracts.BindingModels;
|
using HotelContracts.BindingModels;
|
||||||
using HotelContracts.BusinessLogicsContracts;
|
using HotelContracts.BusinessLogicsContracts;
|
||||||
using HotelContracts.SearchModels;
|
using HotelContracts.SearchModels;
|
||||||
using HotelContracts.StoragesContracts;
|
|
||||||
using HotelContracts.ViewModels;
|
using HotelContracts.ViewModels;
|
||||||
|
|
||||||
namespace HotelView;
|
namespace HotelView;
|
||||||
@ -74,33 +73,34 @@ public class Api
|
|||||||
Maitre.Fio.Replace(" ", "_") + "_" +
|
Maitre.Fio.Replace(" ", "_") + "_" +
|
||||||
DateTime.Now.ToShortDateString() + "." + ext;
|
DateTime.Now.ToShortDateString() + "." + ext;
|
||||||
|
|
||||||
public void SendReportWord()
|
public string SendReportWord(List<int> reservations)
|
||||||
{
|
{
|
||||||
var fileName = GenerateFileName();
|
var fileName = GenerateFileName();
|
||||||
_reportLogic.SaveListCleaningToWordFile(new ReportBindingModel
|
_reportLogic.SaveListCleaningToWordFile(new ReportBindingModel
|
||||||
{
|
{
|
||||||
FileName = fileName
|
FileName = fileName,
|
||||||
});
|
Reservations = reservations
|
||||||
_mailWorker.MailSendAsync(new MailSendInfoBindingModel
|
|
||||||
{
|
|
||||||
MailAddress = Maitre.Login,
|
|
||||||
Subject = "Список составляющих комплектов для подготовки номеров",
|
|
||||||
AttachmentMail = new Attachment(fileName)
|
|
||||||
});
|
});
|
||||||
|
return fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendReportExcel()
|
public string SendReportExcel(List<int> reservations)
|
||||||
{
|
{
|
||||||
var filename = GenerateFileName("xlsx");
|
var filename = GenerateFileName("xlsx");
|
||||||
_reportLogic.SaveListCleaningToExcelFile(new ReportBindingModel
|
_reportLogic.SaveListCleaningToExcelFile(new ReportBindingModel
|
||||||
{
|
{
|
||||||
FileName = filename
|
FileName = filename,
|
||||||
|
Reservations = reservations
|
||||||
});
|
});
|
||||||
_mailWorker.MailSendAsync(new MailSendInfoBindingModel
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ReportGuestViewModel> GetPreRenderReport(DateTime from, DateTime to)
|
||||||
|
{
|
||||||
|
return _reportLogic.GetGuests(new ReportBindingModel
|
||||||
{
|
{
|
||||||
MailAddress = Maitre.Login,
|
From = from,
|
||||||
Subject = "Список составляющих комплектов для подготовки номеров",
|
To = to
|
||||||
AttachmentMail = new Attachment(filename)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,10 +4,8 @@ using System.Diagnostics;
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using HotelContracts.BindingModels;
|
using HotelContracts.BindingModels;
|
||||||
using HotelContracts.SearchModels;
|
using HotelContracts.SearchModels;
|
||||||
using HotelContracts.ViewModels;
|
|
||||||
using HotelDataModels.Models;
|
using HotelDataModels.Models;
|
||||||
using HotelView.Utils;
|
using HotelView.Utils;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
||||||
|
|
||||||
namespace HotelView.Controllers;
|
namespace HotelView.Controllers;
|
||||||
|
|
||||||
@ -44,11 +42,11 @@ public class HomeController : Controller
|
|||||||
ViewBag.GuestLiving = Math.Round((double)ViewBag.GuestLivingCount / guests.Count * 100);
|
ViewBag.GuestLiving = Math.Round((double)ViewBag.GuestLivingCount / guests.Count * 100);
|
||||||
|
|
||||||
ViewBag.MaxDay = reservations.Max(x => x.EndDate - x.StartDate).Days;
|
ViewBag.MaxDay = reservations.Max(x => x.EndDate - x.StartDate).Days;
|
||||||
ViewBag.AverageDay = reservations.Select(x => x.EndDate - x.StartDate)
|
ViewBag.AverageDay = Math.Round(reservations.Select(x => x.EndDate - x.StartDate)
|
||||||
.Select(x => x.Days).Average();
|
.Select(x => x.Days).Average());
|
||||||
|
|
||||||
ViewBag.MaxCost = reservations.Max(x => x.GetCost());
|
ViewBag.MaxCost = reservations.Max(x => x.GetCost());
|
||||||
ViewBag.AverageCost = reservations.Select(x => x.GetCost()).Average();
|
ViewBag.AverageCost = Math.Round(reservations.Select(x => x.GetCost()).Average());
|
||||||
|
|
||||||
ViewBag.LastReservation = reservations.Last();
|
ViewBag.LastReservation = reservations.Last();
|
||||||
ViewBag.LastReservationRooms = string.Join(",", reservations.Last().ReservationsRooms
|
ViewBag.LastReservationRooms = string.Join(",", reservations.Last().ReservationsRooms
|
||||||
@ -124,6 +122,34 @@ public class HomeController : Controller
|
|||||||
return View(_api.GetRoomLogic.ReadList(null));
|
return View(_api.GetRoomLogic.ReadList(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult EditRoom(int id)
|
||||||
|
{
|
||||||
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
var item = _api.GetRoomLogic.ReadElement(new RoomSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
return View(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void EditRoom(int id, string type, double cost)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(type) || cost == 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Invalid arguments");
|
||||||
|
}
|
||||||
|
|
||||||
|
_api.GetRoomLogic.Update(new RoomBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Cost = cost,
|
||||||
|
Type = type
|
||||||
|
});
|
||||||
|
Response.Redirect("Rooms");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void CreateRoom(string type, double cost)
|
public void CreateRoom(string type, double cost)
|
||||||
{
|
{
|
||||||
@ -162,6 +188,38 @@ public class HomeController : Controller
|
|||||||
});
|
});
|
||||||
Response.Redirect("Guests");
|
Response.Redirect("Guests");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult EditGuest(int id)
|
||||||
|
{
|
||||||
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
var guest = _api.GetGuestLogic.ReadElement(new GuestSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
return View(guest);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void EditGuest(int id, string name, string secondName, string lastName)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name) ||
|
||||||
|
string.IsNullOrEmpty(secondName) ||
|
||||||
|
string.IsNullOrEmpty(lastName) ||
|
||||||
|
id == 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Invalid arguments");
|
||||||
|
}
|
||||||
|
|
||||||
|
_api.GetGuestLogic.Update(new GuestBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Name = name.FirstCharToUpper(),
|
||||||
|
SecondName = secondName.FirstCharToUpper(),
|
||||||
|
LastName = lastName.FirstCharToUpper()
|
||||||
|
});
|
||||||
|
Response.Redirect("Guests");
|
||||||
|
}
|
||||||
|
|
||||||
[SuppressMessage("ReSharper.DPA", "DPA0000: DPA issues")]
|
[SuppressMessage("ReSharper.DPA", "DPA0000: DPA issues")]
|
||||||
public IActionResult Reservations()
|
public IActionResult Reservations()
|
||||||
@ -212,12 +270,75 @@ public class HomeController : Controller
|
|||||||
Response.Redirect("Reservations");
|
Response.Redirect("Reservations");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult EditReservation(int id)
|
||||||
|
{
|
||||||
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
var item = _api.GetReservationLogic.ReadElement(new ReservationSearchModel()
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
ViewBag.Guests = _api.GetGuestLogic.ReadList(null);
|
||||||
|
ViewBag.RoomsModel = item.ReservationsRooms.Select(x => x.Key).ToList();
|
||||||
|
ViewBag.Rooms = _api.GetRoomLogic.ReadList(new RoomSearchModel
|
||||||
|
{
|
||||||
|
IsReserved = false
|
||||||
|
});
|
||||||
|
ViewBag.StartDate = item.StartDate.ToString("MM/dd/yyyy").Replace(".", "/");
|
||||||
|
ViewBag.EndDate = item.EndDate.ToString("MM/dd/yyyy").Replace(".", "/");
|
||||||
|
|
||||||
|
return View(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void EditReservation(int id,
|
||||||
|
DateTime dateStart,
|
||||||
|
DateTime dateEnd)
|
||||||
|
{
|
||||||
|
if (dateEnd < dateStart || dateStart < DateTime.Now)
|
||||||
|
{
|
||||||
|
throw new Exception("Invalid arguments");
|
||||||
|
}
|
||||||
|
_api.GetReservationLogic.Update(new ReservationBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
MaitreId = _api.Maitre.Id,
|
||||||
|
StartDate = dateStart,
|
||||||
|
EndDate = dateEnd
|
||||||
|
});
|
||||||
|
Response.Redirect("Reservations");
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult CleaningInstruments()
|
public IActionResult CleaningInstruments()
|
||||||
{
|
{
|
||||||
ViewBag.Maitre = _api.Maitre;
|
ViewBag.Maitre = _api.Maitre;
|
||||||
return View(_api.GetCleaningInstrumentsLogic.ReadList(null));
|
return View(_api.GetCleaningInstrumentsLogic.ReadList(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult EditCleaningInstrument(int id)
|
||||||
|
{
|
||||||
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
var item = _api.GetCleaningInstrumentsLogic.ReadElement(new()
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
return View(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void EditCleaningInstrument(int id, string type)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(type))
|
||||||
|
throw new ArgumentException("Type must be not null");
|
||||||
|
_api.GetCleaningInstrumentsLogic.Update(new CleaningInstrumentsBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Type = type
|
||||||
|
});
|
||||||
|
Response.Redirect("CleaningInstruments");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void CreateCleaningInstrument(string type)
|
public void CreateCleaningInstrument(string type)
|
||||||
{
|
{
|
||||||
@ -256,6 +377,24 @@ public class HomeController : Controller
|
|||||||
});
|
});
|
||||||
Response.Redirect("Cleaning");
|
Response.Redirect("Cleaning");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult EditCleaning(int id)
|
||||||
|
{
|
||||||
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void EditCleaning(int id, DateTime dateTime)
|
||||||
|
{
|
||||||
|
_api.GetCleaningLogic.Update(new CleaningBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Date = dateTime
|
||||||
|
});
|
||||||
|
Response.Redirect("Cleaning");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public void DeleteReservation(int id)
|
public void DeleteReservation(int id)
|
||||||
@ -315,28 +454,40 @@ public class HomeController : Controller
|
|||||||
public IActionResult Report()
|
public IActionResult Report()
|
||||||
{
|
{
|
||||||
ViewBag.Maitre = _api.Maitre;
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
ViewBag.Reservations = _api.GetReservationLogic.ReadList(null);
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpPost]
|
||||||
public void CreateWordReport()
|
public IActionResult CreateReport(List<int> reservations, string options)
|
||||||
{
|
{
|
||||||
_api.SendReportWord();
|
switch (options)
|
||||||
Response.Redirect("Report");
|
{
|
||||||
}
|
case "word":
|
||||||
|
{
|
||||||
[HttpGet]
|
var file = _api.SendReportWord(reservations);
|
||||||
public void CreateExcelReport()
|
return new PhysicalFileResult(file,
|
||||||
{
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
||||||
_api.SendReportExcel();
|
}
|
||||||
Response.Redirect("Report");
|
case "excel":
|
||||||
|
{
|
||||||
|
var file = _api.SendReportExcel(reservations);
|
||||||
|
return new PhysicalFileResult(file,
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void CreatePdfReport(DateTime from, DateTime to)
|
public IActionResult Report(DateTime from, DateTime to)
|
||||||
{
|
{
|
||||||
_api.SendReportPdf(from, to);
|
_api.SendReportPdf(from, to);
|
||||||
Response.Redirect("Report");
|
ViewBag.Maitre = _api.Maitre;
|
||||||
|
ViewBag.Reservations = _api.GetReservationLogic.ReadList(null);
|
||||||
|
ViewBag.PreRender = _api.GetPreRenderReport(from, to);
|
||||||
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -39,6 +39,11 @@
|
|||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
Удалить
|
Удалить
|
||||||
</a>
|
</a>
|
||||||
|
<a
|
||||||
|
href="/Home/EditCleaning?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
|
||||||
|
Изменить
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
Удалить
|
Удалить
|
||||||
</a>
|
</a>
|
||||||
|
<a
|
||||||
|
href="/Home/EditCleaningInstrument?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
|
||||||
|
Изменить
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
22
Hotel/HotelView/Views/Home/EditCleaning.cshtml
Normal file
22
Hotel/HotelView/Views/Home/EditCleaning.cshtml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "Уборки";
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<dialog class="mdl-dialog" open>
|
||||||
|
<h4 class="mdl-dialog__title">Изменение уборки</h4>
|
||||||
|
<form method="post">
|
||||||
|
<div class="mdl-dialog__content">
|
||||||
|
<span>Дата уборки</span>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
|
<input class="mdl-textfield__input" type="date" id="date" name="dateTime">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-dialog__actions">
|
||||||
|
<button type="submit" class="mdl-button">Изменить</button>
|
||||||
|
<a asp-action="Cleaning" class="mdl-button close">Отмена</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</dialog>
|
||||||
|
</div>
|
23
Hotel/HotelView/Views/Home/EditCleaningInstrument.cshtml
Normal file
23
Hotel/HotelView/Views/Home/EditCleaningInstrument.cshtml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
@model HotelContracts.ViewModels.CleaningInstrumentsViewModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Инструменты для уборки";
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<dialog class="mdl-dialog" open>
|
||||||
|
<h4 class="mdl-dialog__title">Изменение иструмента</h4>
|
||||||
|
<form method="post">
|
||||||
|
<div class="mdl-dialog__content">
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<input class="mdl-textfield__input" type="text" id="secondName" name="type" value="@Model.Type">
|
||||||
|
<label class="mdl-textfield__label" for="secondName">Название</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-dialog__actions">
|
||||||
|
<button type="submit" class="mdl-button">Изменить</button>
|
||||||
|
<a asp-action="CleaningInstruments" class="mdl-button close">Отмена</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</dialog>
|
||||||
|
</div>
|
31
Hotel/HotelView/Views/Home/EditGuest.cshtml
Normal file
31
Hotel/HotelView/Views/Home/EditGuest.cshtml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
@model HotelContracts.ViewModels.GuestViewModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Гости";
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<dialog class="mdl-dialog" open>
|
||||||
|
<h4 class="mdl-dialog__title">Изменить постояльца</h4>
|
||||||
|
<form method="post">
|
||||||
|
<div class="mdl-dialog__content">
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<input class="mdl-textfield__input" type="text" id="secondName" name="secondName" value="@Model.SecondName">
|
||||||
|
<label class="mdl-textfield__label" for="secondName">Фамилия</label>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<input class="mdl-textfield__input" type="text" id="name" name="name" value="@Model.Name">
|
||||||
|
<label class="mdl-textfield__label" for="name">Имя</label>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<input class="mdl-textfield__input" type="text" id="LastName" name="LastName" value="@Model.LastName">
|
||||||
|
<label class="mdl-textfield__label" for="LastName">Отчество</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-dialog__actions">
|
||||||
|
<button type="submit" class="mdl-button">Изменить</button>
|
||||||
|
<a asp-controller="Home" asp-action="Guests" class="mdl-button close">Отмена</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</dialog>
|
||||||
|
</div>
|
27
Hotel/HotelView/Views/Home/EditReservation.cshtml
Normal file
27
Hotel/HotelView/Views/Home/EditReservation.cshtml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
@model HotelContracts.ViewModels.ReservationViewModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Бронирования";
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<dialog class="mdl-dialog" open>
|
||||||
|
<h4 class="mdl-dialog__title">Изменить бронирование</h4>
|
||||||
|
<form method="post">
|
||||||
|
<div class="mdl-dialog__content">
|
||||||
|
<span>Дата заселения</span>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
|
<input class="mdl-textfield__input" type="date" id="dateStart" name="dateStart" value="@ViewBag.StartDate">
|
||||||
|
</div>
|
||||||
|
<span>Дата выселения</span>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
|
<input class="mdl-textfield__input" type="date" id="dateEnd" name="dateEnd" value="<%=@ViewBag.EndDate%>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-dialog__actions">
|
||||||
|
<button type="submit" class="mdl-button">Изменить</button>
|
||||||
|
<a asp-action="Reservations" class="mdl-button close">Отмена</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</dialog>
|
||||||
|
</div>
|
35
Hotel/HotelView/Views/Home/EditRoom.cshtml
Normal file
35
Hotel/HotelView/Views/Home/EditRoom.cshtml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
@model HotelContracts.ViewModels.RoomViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Home Page";
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<dialog class="mdl-dialog" open>
|
||||||
|
<h4 class="mdl-dialog__title">Изменение номера</h4>
|
||||||
|
<form method="post">
|
||||||
|
<div class="mdl-dialog__content">
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<input class="mdl-textfield__input" type="number" id="cost" name="cost" value="@Model.Cost">
|
||||||
|
<label class="mdl-textfield__label" for="cost">Стоимость</label>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||||
|
<select class="mdl-textfield__input" name="type" id="type" value="@Model.Type">
|
||||||
|
<option value="standard">Стандартный</option>
|
||||||
|
<option value="superior">Улучшенный</option>
|
||||||
|
<option value="bedroom">Со спальной комнатой</option>
|
||||||
|
<option value="apartment">Апартаменты/квартира</option>
|
||||||
|
<option value="studio">Студия</option>
|
||||||
|
<option value="suite">Люкс</option>
|
||||||
|
</select>
|
||||||
|
<label class="mdl-textfield__label" for="type">Вид номера</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdl-dialog__actions">
|
||||||
|
<button type="submit" class="mdl-button">Изменить</button>
|
||||||
|
<a asp-action="Rooms" class="mdl-button close">Отмена</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</dialog>
|
||||||
|
</div>
|
@ -22,6 +22,11 @@
|
|||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
Удалить
|
Удалить
|
||||||
</a>
|
</a>
|
||||||
|
<a
|
||||||
|
href="/Home/EditGuest?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
|
||||||
|
Изменить
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<h6>Постояльцев проживает (@ViewBag.GuestLivingCount из @ViewBag.GuestCount)</h6>
|
<h6>Постояльцев проживает (@ViewBag.GuestLivingCount из @ViewBag.GuestCount)</h6>
|
||||||
</div>
|
</div>
|
||||||
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid">
|
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid">
|
||||||
<div class="line" style="--value:@Math.Round(ViewBag.AverageDay);--max: @ViewBag.MaxDay">
|
<div class="line" style="--value:@ViewBag.AverageDay;--max: @ViewBag.MaxDay">
|
||||||
<div class="line_min">0</div>
|
<div class="line_min">0</div>
|
||||||
<div class="line_value">@ViewBag.AverageDay</div>
|
<div class="line_value">@ViewBag.AverageDay</div>
|
||||||
<div class="line_max">@ViewBag.MaxDay</div>
|
<div class="line_max">@ViewBag.MaxDay</div>
|
||||||
|
@ -1,49 +1,101 @@
|
|||||||
@model List<HotelContracts.ViewModels.RoomViewModel>
|
@using HotelContracts.ViewModels
|
||||||
|
@model List<HotelContracts.ViewModels.RoomViewModel>
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Отчеты";
|
ViewData["Title"] = "Отчеты";
|
||||||
Layout = "_Layout";
|
Layout = "_Layout";
|
||||||
}
|
}
|
||||||
<link rel="stylesheet" href="~/css/index.css">
|
<link rel="stylesheet" href="~/css/index.css">
|
||||||
<div class="">
|
<div class="">
|
||||||
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;">
|
|
||||||
<h6>Создать отчет в формате (.docx) и отправить его на почту @ViewBag.Maitre.Login</h6>
|
|
||||||
<a asp-controller="Home"
|
|
||||||
asp-action="CreateWordReport"
|
|
||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
|
||||||
Отправить
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
align-items: center;">
|
align-items: center;">
|
||||||
<h6>Создать отчет в формате (.xlsx) и отправить его на почту @ViewBag.Maitre.Login</h6>
|
<h6>Создать отчет в формате (.xlsx|.docx) и скачать его @ViewBag.Maitre.Login</h6>
|
||||||
<a asp-controller="Home"
|
<form asp-controller="Home" asp-action="CreateReport">
|
||||||
asp-action="CreateExcelReport"
|
<div style="display: flex; flex-direction: column;">
|
||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
<span>Бронирования</span>
|
||||||
Отправить
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
</a>
|
<select name="reservations" id="" class="mdl-textfield__input" multiple="multiple">
|
||||||
|
@{
|
||||||
|
@foreach (var item in ViewBag.Reservations)
|
||||||
|
{
|
||||||
|
<option value="@item.Id">#@item.Id</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-1">
|
||||||
|
<input type="radio" id="option-1" class="mdl-radio__button" name="options" value="excel" checked>
|
||||||
|
<span class="mdl-radio__label">Excel</span>
|
||||||
|
</label>
|
||||||
|
<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-2">
|
||||||
|
<input type="radio" id="option-2" class="mdl-radio__button" name="options" value="word">
|
||||||
|
<span class="mdl-radio__label">Word</span>
|
||||||
|
</label>
|
||||||
|
<button type="submit" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
|
Создать
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;">
|
align-items: center;">
|
||||||
<h6 class="line_label">Создать отчет в формате (.pdf) и отправить его на почту @ViewBag.Maitre.Login</h6>
|
<h6 class="line_label">Создать отчет в формате (.pdf) и отправить его на почту @ViewBag.Maitre.Login</h6>
|
||||||
<form asp-controller="Home" asp-action="CreatePdfReport" method="post">
|
<form asp-controller="Home" asp-action="Report" method="post">
|
||||||
<span>Начальная дата</span>
|
<span><b>Начальная дата</b></span>
|
||||||
<div class="mdl-textfield mdl-js-textfield">
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
<input class="mdl-textfield__input" type="date" name="from">
|
<input class="mdl-textfield__input" type="date" name="from">
|
||||||
</div>
|
</div>
|
||||||
<span>Конечная дата</span>
|
<span><b>Конечная дата</b></span>
|
||||||
<div class="mdl-textfield mdl-js-textfield">
|
<div class="mdl-textfield mdl-js-textfield">
|
||||||
<input class="mdl-textfield__input" type="date" name="to">
|
<input class="mdl-textfield__input" type="date" name="to">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
<button type="submit" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
Отправить
|
Отправить
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@{
|
||||||
|
if (ViewBag.PreRender != null)
|
||||||
|
{
|
||||||
|
<div class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid" style="padding: 1rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;">
|
||||||
|
<h6 class="line_label">Данный отчет отправлен на почту @ViewBag.Maitre.Login</h6>
|
||||||
|
<table class="mdl-data-table mdl-js-data-table mdl-shadow--2dp" style="width: 100%;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Фамилия</th>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Имя</th>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Отчество</th>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Заселение</th>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Выселение</th>
|
||||||
|
<th class="mdl-data-table__cell--non-numeric">Набор</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@{
|
||||||
|
@foreach (var item in ViewBag.PreRender)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">@item.SecondName</td>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">@item.Name</td>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">@item.LastName</td>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">@item.StartDate.ToShortDateString()</td>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">@item.EndDate.ToShortDateString()</td>
|
||||||
|
<td class="mdl-data-table__cell--non-numeric">
|
||||||
|
@item.GetCleaningInstruments()
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
</div>
|
</div>
|
@ -40,7 +40,12 @@
|
|||||||
<a
|
<a
|
||||||
href="/Home/DeleteReservation?id=@item.Id"
|
href="/Home/DeleteReservation?id=@item.Id"
|
||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
Удалить
|
Удалить
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="/Home/EditReservation?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
|
||||||
|
Изменить
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@model List<HotelContracts.ViewModels.RoomViewModel>
|
@model List<HotelContracts.ViewModels.RoomViewModel>
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Home Page";
|
ViewData["Title"] = "Home Page";
|
||||||
Layout = "_Layout";
|
Layout = "_Layout";
|
||||||
@ -46,14 +47,20 @@
|
|||||||
<span>Забронирована</span>
|
<span>Забронирована</span>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<span class="mdl-list__item-secondary-content">
|
|
||||||
<span class="mdl-list__item-secondary-info">@item.GetTypeRoom()</span>
|
<span class="mdl-list__item-secondary-content" style="margin: 0 15px;">
|
||||||
<a
|
<span class="mdl-list__item-secondary-info">@item.GetTypeRoom()</span>
|
||||||
href="/Home/DeleteRoom?id=@item.Id"
|
|
||||||
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
|
||||||
Удалить
|
|
||||||
</a>
|
|
||||||
</span>
|
</span>
|
||||||
|
<a
|
||||||
|
href="/Home/DeleteRoom?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
|
||||||
|
Удалить
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="/Home/EditRoom?id=@item.Id"
|
||||||
|
class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
|
||||||
|
Изменить
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -249,8 +249,8 @@ body {
|
|||||||
|
|
||||||
dialog {
|
dialog {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 30%;
|
top: 50px;
|
||||||
left: 20px;
|
left: 40%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mdl-list__item-avatar {
|
.mdl-list__item-avatar {
|
||||||
|
Loading…
Reference in New Issue
Block a user