public static List<SubEntityRecord> GetDropdownValues(LocationAdminDetailView parent, int orgUnitId)
        {
            IEnumerable<OrgUnitOrgUnitTypeDto> existingTypes = new List<OrgUnitOrgUnitTypeDto>();
            if (orgUnitId != 0)
                existingTypes = GetOrgUnitOrgUnitTypes(parent, orgUnitId);

            var request = new ListOrgUnitTypesRequest() { IsEnabled = true };
            var types = parent.ProcessRequest<ListOrgUnitTypesResponse>(request).OrgUnitTypes;
            var records = new List<SubEntityRecord>();

            foreach (var type in types.Where(t => !existingTypes.Any(e => e.OrgUnitTypeId == t.Id)))
            {
                var record = new SubEntityRecord();
                record.DisplayName = type.Name;
                record.Id = type.Id;
                record.Fields.Add(new Field(_idField, "Id", FieldTypes.Hidden, null));
                record.Fields.Add(new Field(_orgUnitIdField, _orgUnitIdField, FieldTypes.Hidden, orgUnitId));
                record.Fields.Add(new Field(_orgUnitTypeIdField, _orgUnitTypeIdField, FieldTypes.Hidden, type.Id));
                record.Fields.Add(new Field(_nameField, "Name", FieldTypes.Label, type.Name));
                record.Fields.Add(new Field(_isPrimaryOrgUnitTypeField, "Is Primary", FieldTypes.Checkbox, false, true));

                records.Add(record);
            }

            return records;
        }
        public static List<SubEntityRecord> GetDropdownValues(LocationAdminDetailView parent, int orgUnitId)
        {
            IEnumerable<OrgUnitInsuranceDto> existingInsurances = new List<OrgUnitInsuranceDto>();
            if (orgUnitId != 0)
                existingInsurances = GetOrgUnitInsurances(parent, orgUnitId);

            var request = new ListInsurancesRequest() { IsEnabled = true };
            var insurances = parent.ProcessRequest<ListInsurancesResponse>(request).Insurances;
            var records = new List<SubEntityRecord>();

            foreach (var insurance in insurances.Where(i => !existingInsurances.Any(e => e.InsuranceId == i.Id)))
            {
                var record = new SubEntityRecord();
                record.DisplayName = insurance.Name;
                record.Id = insurance.Id;
                record.Fields.Add(new Field(_idField, "Id", FieldTypes.Hidden, null));
                record.Fields.Add(new Field(_orgUnitIdField, _orgUnitIdField, FieldTypes.Hidden, orgUnitId));
                record.Fields.Add(new Field(_insuranceIdField, _insuranceIdField, FieldTypes.Hidden, insurance.Id));
                record.Fields.Add(new Field(_nameField, "Name", FieldTypes.Label, insurance.Name));

                records.Add(record);
            }

            return records;
        }
        public static void Save(LocationAdminDetailView parent, SubEntity hours, int orgUnitId)
        {
            var partiallySaved = false;

            try
            {
                hours.ErrorMessage = string.Empty;

                //New
                foreach (var record in hours.Records.Where(r => r.Action == RecordActions.New))
                {
                    var timeSpan = CommonUtils.CreateScheduleTimeSpan(parent.GetFieldValue(record.Fields, _dayField), parent.GetFieldValue(record.Fields, _openTime), parent.GetFieldValue(record.Fields, _closeTime));

                    var request = new AddOrgUnitScheduleRequest()
                    {
                        LocationId = int.Parse(parent.GetFieldValue(record.Fields, _orgUnitIdField)),
                        OpenTime = timeSpan.OpenTime,
                        OpenHours = timeSpan.OpenHours
                    };

                    parent.ProcessRequest<AddOrgUnitScheduleResponse>(request);
                    partiallySaved = true;
                }

                //Deletes
                foreach (var record in hours.Records.Where(r => r.Action == RecordActions.Deleted))
                {
                    var request = new DeleteOrgUnitScheduleRequest(int.Parse(parent.GetFieldValue(record.Fields, _idField)));
                    parent.ProcessRequest<DeleteOrgUnitScheduleResponse>(request);
                    partiallySaved = true;
                }
            }
            catch (Exception ex)
            {
                hours.ErrorMessage = ex.Message;

                if(!partiallySaved)
                    throw;
            }

            hours = BuildLocationHoursSubEntity(parent, orgUnitId);
        }
        public static void Save(LocationAdminDetailView parent, SubEntity insurances, int orgUnitId)
        {
            var partiallySaved = false;

            try
            {
                insurances.ErrorMessage = string.Empty;

                //Existing Records Added
                foreach (var record in insurances.Records.Where(r => r.Action == RecordActions.Added))
                {
                    var request = new AddOrgUnitInsuranceRequest()
                    {
                        OrgUnitId = orgUnitId,
                        InsuranceId = int.Parse(parent.GetFieldValue(record.Fields, _insuranceIdField))
                    };

                    parent.ProcessRequest<AddOrgUnitInsuranceResponse>(request);
                    partiallySaved = true;
                }

                //New Records Created
                foreach (var record in insurances.Records.Where(r => r.Action == RecordActions.New))
                {
                    //Add New OrgUnit insurance
                    var addInsuranceRequest = new AddInsuranceRequest()
                    {
                        Name = parent.GetFieldValue(record.Fields, _nameField),
                        IsEnabled = true
                    };
                    var addedInsuranceId = parent.ProcessRequest<AddInsuranceResponse>(addInsuranceRequest).Id;

                    //Add newly created insurance to OrgUnit
                    var request = new AddOrgUnitInsuranceRequest()
                    {
                        OrgUnitId = orgUnitId,
                        InsuranceId = addedInsuranceId
                    };

                    parent.ProcessRequest<AddOrgUnitInsuranceResponse>(request);
                    partiallySaved = true;
                }

                //Deletes
                foreach (var record in insurances.Records.Where(r => r.Action == RecordActions.Deleted))
                {
                    var request = new RemoveOrgUnitInsuranceRequest()
                    {
                        Id = int.Parse(parent.GetFieldValue(record.Fields, _idField))
                    };
                    parent.ProcessRequest<RemoveOrgUnitInsuranceResponse>(request);
                    partiallySaved = true;
                }
            }
            catch (Exception ex)
            {
                insurances.ErrorMessage = ex.Message;

                if(!partiallySaved)
                    throw;
            }

            insurances = BuildLocationInsurancesSubEntity(parent, orgUnitId);
        }
 private static IEnumerable<OrgUnitInsuranceDto> GetOrgUnitInsurances(LocationAdminDetailView parent, int orgUnitId)
 {
     var request = new ListOrgUnitInsurancesRequest(orgUnitId);
     return parent.ProcessRequest<ListOrgUnitInsurancesResponse>(request).OrgUnitInsurances;
 }
        public static void Save(LocationAdminDetailView parent, SubEntity orgUnitTypes, int orgUnitId)
        {
            var partiallySaved = false;

            try
            {
                orgUnitTypes.ErrorMessage = string.Empty;

                if (orgUnitTypes.Records.Count(s => s.Fields.Any(f => f.FieldName == _isPrimaryOrgUnitTypeField) && bool.Parse(parent.GetFieldValue(s.Fields, _isPrimaryOrgUnitTypeField))) > 1)
                    throw new BusinessException("Only one Location Type can be set as the primary location");

                //Edits
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Edited))
                {
                    var request = new UpdateOrgUnitOrgUnitTypeRequest
                    {
                        Id = int.Parse(parent.GetFieldValue(record.Fields, _idField)),
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = int.Parse(parent.GetFieldValue(record.Fields, _orgUnitTypeIdField)),
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField))
                    };

                    parent.ProcessRequest<UpdateOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //Existing Records Added
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Added))
                {
                    var request = new AddOrgUnitOrgUnitTypeRequest()
                    {
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = int.Parse(parent.GetFieldValue(record.Fields, _orgUnitTypeIdField)),
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField)),
                    };

                    parent.ProcessRequest<AddOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //New Records Created
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.New))
                {
                    //Add New OrgUnit Type
                    var addTypeRequest = new AddOrgUnitTypeRequest()
                    {
                        Name = parent.GetFieldValue(record.Fields, _nameField),
                        IsEnabled = bool.Parse(parent.GetFieldValue(record.Fields, _isEnabledField)),
                        IsOutsideOfOrganization = bool.Parse(parent.GetFieldValue(record.Fields, _isExternalField)),
                        SiteIndicator = bool.Parse(parent.GetFieldValue(record.Fields, _siteIndicatorField)),
                        ImageUrl = parent.GetFieldValue(record.Fields, _imageUrlField)
                    };

                    var addedTypeId = parent.ProcessRequest<AddOrgUnitTypeResponse>(addTypeRequest).Id;
                    partiallySaved = true;

                    //Add newly created type to OrgUnit
                    var request = new AddOrgUnitOrgUnitTypeRequest()
                    {
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = addedTypeId,
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField))
                    };

                    parent.ProcessRequest<AddOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //Deletes
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Deleted))
                {
                    var request = new RemoveOrgUnitOrgUnitTypeRequest()
                    {
                        Id = int.Parse(parent.GetFieldValue(record.Fields, _idField))
                    };
                    parent.ProcessRequest<RemoveOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }
            }
            catch (Exception ex)
            {
                orgUnitTypes.ErrorMessage = ex.Message;

                if (!partiallySaved)
                    throw;
            }

            orgUnitTypes = BuildLocationTypesSubEntity(parent, orgUnitId);
        }
 private static IEnumerable<OrgUnitServicesDto> GetOrgUnitServices(LocationAdminDetailView parent, int orgUnitId)
 {
     var request = new ListOrgUnitServicesRequest(orgUnitId) { IsAdminView = true };
     return parent.ProcessRequest<ListOrgUnitServicesResponse>(request).OrgUnitServices;
 }
 private static IEnumerable<OrgUnitScheduleListItem> GetOrgUnitHours(LocationAdminDetailView parent, int orgUnitId)
 {
     var request = new ListOrgUnitScheduleRequest(orgUnitId);
     return parent.ProcessRequest<ListOrgUnitScheduleResponse>(request).ScheduleTimeSpans;
 }