Respecter un début à aujourd'hui et une fin à j+14

[WIP] respecter les jours d'ouverture
main
Paul Schneider 9 years ago
parent 9fcc08103c
commit 4736ad8a09
5 changed files with 54 additions and 22 deletions

@ -33,6 +33,8 @@ using Google.Apis.Util.Store;
namespace Yavsc.Models.Google.Calendar namespace Yavsc.Models.Google.Calendar
{ {
using System.Collections.Generic;
using System.Linq;
using Models.Google; using Models.Google;
using Yavsc.Helpers; using Yavsc.Helpers;
using Yavsc.Models.Calendar; using Yavsc.Models.Calendar;
@ -176,15 +178,35 @@ namespace Yavsc.Models.Google.Calendar
} }
public async Task<DateTimeChooserViewModel> CreateViewModel( public async Task<DateTimeChooserViewModel> CreateViewModel(
string inputId, string inputId,
string calid, DateTime mindate, DateTime maxdate, string userId) string calid, DateTime mindate, DateTime maxdate)
{ {
if (calid ==null) return new DateTimeChooserViewModel {
InputId = inputId,
MinDate = mindate,
MaxDate = maxdate
};
var eventList = await GetCalendarAsync(calid, mindate, maxdate); var eventList = await GetCalendarAsync(calid, mindate, maxdate);
List<Period> free = new List<Period> ();
List<Period> busy = new List<Period> ();
foreach (var ev in eventList.items)
{
if (ev.transparency == "transparent" )
{
free.Add(new Period { Start = ev.start.datetime, End = ev.end.datetime });
}
else busy.Add(new Period { Start = ev.start.datetime, End = ev.end.datetime });
}
return new DateTimeChooserViewModel { return new DateTimeChooserViewModel {
InputId = inputId, InputId = inputId,
MinDate = mindate, MinDate = mindate,
MaxDate = maxdate, MaxDate = maxdate,
DisabledTimeIntervals = null Free = free.ToArray(),
Busy = busy.ToArray(),
FreeDates = free.SelectMany( p => new string [] { p.Start.ToString("DD/mm/yyyy"), p.End.ToString("DD/mm/yyyy") }).Distinct().ToArray(),
BusyDates = busy.SelectMany( p => new string [] { p.Start.ToString("DD/mm/yyyy"), p.End.ToString("DD/mm/yyyy") }).Distinct().ToArray()
}; };
} }
} }

@ -3,7 +3,6 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc;
using Yavsc.Models; using Yavsc.Models;
using Yavsc.Models.Calendar; using Yavsc.Models.Calendar;
using Yavsc.ViewModels.Calendar;
namespace Yavsc.ViewComponents namespace Yavsc.ViewComponents
{ {
@ -21,24 +20,31 @@ namespace Yavsc.ViewComponents
} }
public async Task<IViewComponentResult> InvokeAsync ( public async Task<IViewComponentResult> InvokeAsync (
string templateName,
string htmlFieldName, string htmlFieldName,
string calId) string calId = null)
{ {
var minDate = DateTime.Now; var minDate = DateTime.Now;
var maxDate = minDate.AddDays(20); var maxDate = minDate.AddDays(20);
var cal = await _manager.GetCalendarAsync( var model = await _manager.CreateViewModel(
htmlFieldName,
calId, minDate, maxDate calId, minDate, maxDate
); );
ViewData["Calendar"] = cal; return View(model);
}
public async Task<IViewComponentResult> InvokeAsync (
string htmlFieldName)
{
var minDate = DateTime.Now;
var maxDate = minDate.AddDays(20);
var model = await _manager.CreateViewModel(
htmlFieldName,
null, minDate, maxDate
);
return View(templateName, new DateTimeChooserViewModel { return View(model);
InputId = htmlFieldName,
MinDate = minDate,
MaxDate = maxDate
});
} }
} }
} }

@ -9,6 +9,11 @@ namespace Yavsc.ViewModels.Calendar
public string InputId { get; set; } public string InputId { get; set; }
public DateTime MinDate { get; set; } public DateTime MinDate { get; set; }
public DateTime MaxDate { get; set; } public DateTime MaxDate { get; set; }
public Period [] DisabledTimeIntervals { get; set; } public Period [] Busy { get; set; }
public Period [] Free { get; set; }
public string [] FreeDates { get ; set; }
public string [] BusyDates { get ; set; }
} }
} }

@ -338,11 +338,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class='col-sm-6'> <div class='col-sm-6'>
@await Component.InvokeAsync( @await Component.InvokeAsync("Calendar","EventDate", Model.PerformerProfile.Performer.DedicatedGoogleCalendar)
"Calendar",
"Default",
"EventDate",
Model.PerformerProfile.Performer.DedicatedGoogleCalendar)
</div> </div>
<span asp-validation-for="EventDate" class="text-danger"> <span asp-validation-for="EventDate" class="text-danger">

@ -1,11 +1,14 @@
@model DateTimeChooserViewModel @model DateTimeChooserViewModel
<script> <script>
var events = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewData["Calendar"])); var free = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.FreeDates));
var busy = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.BusyDates));
</script> </script>
<div class='input-group date' > <div class='input-group date' >
<input class="form-control" name="@Model.InputId" /> <input data-date-min-date="@Model.MinDate.ToString("MM/dd/yyyy")"
data-date-max-date="@Model.MaxDate.ToString("MM/dd/yyyy")" data-date-enable-dates="free"
class="form-control " name="@Model.InputId" id="@Model.InputId" />
<span class="input-group-addon"> <span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span> <span class="glyphicon glyphicon-calendar"></span>
</span> </span>

Loading…