public static SubEntity BuildSubEntity(OccurrencesAdminDetailView parent, int occurrenceId)
        {
            _subEntity = parent._viewModel.SubEntities.FirstOrDefault(s => s.EntityName == OccurrencesAdminDetailView._occurrenceManageDatesSubEntity);

            if (_subEntity == null)
                _subEntity = new SubEntity() { EntityName = OccurrencesAdminDetailView._occurrenceManageDatesSubEntity, DisplayName = "Manage Dates", CanAddExisting = false, CanCreateNew = true, CanDelete = true };
            else
                _subEntity.Records = new List<SubEntityRecord>();

            AddExistingRecords(parent, occurrenceId);
            AddNewRecordTemplate(parent, occurrenceId);

            return _subEntity;
        }
        public static void Save(OccurrencesAdminDetailView parent, SubEntity occurrenceDates, int occurrenceId)
        {
            try
            {
                occurrenceDates.ErrorMessage = string.Empty;

                //Existing Records Added
                foreach (var record in occurrenceDates.Records.Where(r => r.Action == RecordActions.New))
                {
                    var startDate = parent.GetFieldValue(record.Fields, _day);
                    var startTime = parent.GetFieldValue(record.Fields, _startTime);
                    var endTime = parent.GetFieldValue(record.Fields, _endTime);

                    var d = GetDateTime(startDate, "Date");
                    d = GetDateTime(d.ToShortDateString(), "Date");

                    var s = GetDateTime(startTime, "Start Time").TimeOfDay.TotalDays;
                    var e = GetDateTime(endTime, "End Time").TimeOfDay.TotalDays;

                    var requestStartDate = d.AddDays(s);
                    var requestEndDate = d.AddDays(e);

                    var request = new AddOccurrenceDateRequest
                    {
                        StartDate = requestStartDate,
                        EndDate = requestEndDate,
                        EventOccurrenceId = occurrenceId
                    };
                    parent.ProcessRequest<AddOccurrenceDateResponse>(request);
                }

                //Records Deleted
                foreach (var record in occurrenceDates.Records.Where(r => r.Action == RecordActions.Deleted))
                {
                    var request = new DeleteOccurrenceDateRequest
                    {
                        EventOccurrenceDateId = record.Id
                    };
                    parent.ProcessRequest<DeleteOccurrenceDateResponse>(request);
                }
            }
            catch (Exception ex)
            {
                occurrenceDates.ErrorMessage = ex.Message;
                throw;
            }
        }
        private static void AddExistingRecords(OccurrencesAdminDetailView parent, int occurrenceId)
        {
            var dates = GetEventOccurrenceDates(parent, occurrenceId);

            foreach (var date in dates)
            {
                var record = new SubEntityRecord();
                var fields = new List<Field>();

                fields.Add(new Field(_id, "Id", FieldTypes.Hidden, date.Id));
                fields.Add(new Field(_day, "Day", FieldTypes.Text, date.StartDate.ToShortDateString()) { IsDisabled = true });
                fields.Add(new Field(_startTime, "Start Time", FieldTypes.Text, date.StartDate.ToString("hh:mm tt")) { IsDisabled = true });
                fields.Add(new Field(_endTime, "End Time", FieldTypes.Text, date.EndDate.ToString("hh:mm tt")) { IsDisabled = true });

                record.Id = date.Id;
                record.Fields = fields;

                _subEntity.Records.Add(record);
            }
        }
 private static IEnumerable<EventOccurrenceDateDto> GetEventOccurrenceDates(OccurrencesAdminDetailView parent, int occurrenceId)
 {
     var request = new ReadEventOccurrenceRequest { Id = occurrenceId };
     return parent.ProcessRequest<ReadEventOccurrenceResponse>(request).EventOccurrence.EventOccurrenceDates;
 }
        private static void AddNewRecordTemplate(OccurrencesAdminDetailView parent, int occurrenceId)
        {
            _subEntity.NewRecordTemplate = new SubEntityRecord() { };

            _subEntity.NewRecordTemplate.Fields.Add(new Field(_id, "OccurrenceId", FieldTypes.Hidden, occurrenceId));
            _subEntity.NewRecordTemplate.Fields.Add(new Field(_day, "Day", FieldTypes.DatePicker, string.Empty, true));
            _subEntity.NewRecordTemplate.Fields.Add(new Field(_startTime, "Start Time", FieldTypes.Text, "8:00 AM", true));
            _subEntity.NewRecordTemplate.Fields.Add(new Field(_endTime, "End Time", FieldTypes.Text, "5:00 PM", true));
        }