Example #1
0
        private async Task <ResultSuccess <Partner> > SavePartner()
        {
            try
            {
                if (!App.GpsEnabled)
                {
                    return(new ResultSuccess <Partner>(false, "لطفا مکان یاب را فعال نمایید"));
                }

                if (CityPicker.SelectedIndex == -1)
                {
                    return(new ResultSuccess <Partner>(false, "شهر انتخاب نشده است."));
                }

                if (ZonePicker.SelectedIndex == -1)
                {
                    return(new ResultSuccess <Partner>(false, "منطقه انتخاب نشده است."));
                }

                if (RoutePicker.SelectedIndex == -1)
                {
                    return(new ResultSuccess <Partner>(false, "مسیر انتخاب نشده است."));
                }

                if (string.IsNullOrWhiteSpace(FirstName.Text) && string.IsNullOrWhiteSpace(LastName.Text))
                {
                    return(new ResultSuccess <Partner>(false, "نام و نام خانوادگی وارد نشده است."));
                }

                if (CreditPicker.SelectedIndex == -1)
                {
                    return(new ResultSuccess <Partner>(false, "اعتبار انتخاب نشده است."));
                }

                var CityId = Cities[CityPicker.SelectedIndex].Id;
                var ZoneId = Zones.Where(a => a.ParentId == CityId).ToArray()[ZonePicker.SelectedIndex].Id;
                var Route  = Routes.Where(a => a.ParentId == ZoneId).ToArray()[RoutePicker.SelectedIndex];

                var DynamicGroups = new DynamicGroupPartner[] { };
                if (EditingPartner == null)
                {
                    EditingPartner = new Partner()
                    {
                        Id                        = Guid.NewGuid(),
                        Code                      = "--------" + new Random().Next(0, 999999999).ToString().PadLeft(9, '0'),
                        FirstName                 = FirstName.Text,
                        LastName                  = LastName.Text,
                        Name                      = FirstName.Text + " " + LastName.Text,
                        LegalName                 = LegalName.Text,
                        ZoneId                    = Route.Id,
                        GroupCode                 = Route.EntityGroupCode,
                        ZoneCompleteCode          = Route.CompleteCode,
                        Phone1                    = Phone1.Text,
                        Phone2                    = Phone2.Text,
                        Mobile                    = Cell.Text,
                        Fax                       = Fax.Text,
                        Address                   = Address.Text,
                        IsLegal                   = IsPartnerLegal.IsToggled,
                        CalculateVATForThisPerson = CalculateVATForThisPerson.IsToggled,
                        Enabled                   = true,
                        ChangeDate                = DateTime.Now,
                        Sent                      = false,
                        CreditId                  = Credits[CreditPicker.SelectedIndex].Id
                    };

                    DynamicGroups = PartnerGroupSwitchs.Select((a, index) => new { a, index }).ToArray().Where(a => a.a.Value.IsToggled).Select(a => new DynamicGroupPartner()
                    {
                        GroupId   = PartnerGroups[a.index].Id,
                        PartnerId = EditingPartner.Id
                    }).ToArray();

                    if (!DynamicGroups.Any())
                    {
                        return(new ResultSuccess <Partner>(false, "هیچ گروهی انتخاب نشده است."));
                    }

                    //if (!DynamicGroups.Any())
                    //    DynamicGroups = new DynamicGroupPartner[1] { new DynamicGroupPartner()
                    //    {
                    //        GroupId = new Guid("00000000-0000-0000-0000-EEEEEEEEEEEE"),
                    //        PartnerId = EditingPartner.Id
                    //    } };

                    var result = await App.DB.InsertOrUpdateRecordAsync <Partner>(EditingPartner);

                    if (!result.Success)
                    {
                        return(new ResultSuccess <Partner>(false, result.Message));
                    }

                    result = await App.DB.InsertOrUpdateAllRecordsAsync <DynamicGroupPartner>(DynamicGroups);

                    if (!result.Success)
                    {
                        return(new ResultSuccess <Partner>(false, result.Message));
                    }
                }
                else
                {
                    EditingPartner.FirstName        = FirstName.Text;
                    EditingPartner.LastName         = LastName.Text;
                    EditingPartner.Name             = FirstName.Text + " " + LastName.Text;
                    EditingPartner.LegalName        = LegalName.Text;
                    EditingPartner.ZoneId           = Route.Id;
                    EditingPartner.GroupCode        = Route.EntityGroupCode;
                    EditingPartner.ZoneCompleteCode = Route.CompleteCode;
                    EditingPartner.Phone1           = Phone1.Text;
                    EditingPartner.Phone2           = Phone2.Text;
                    EditingPartner.Mobile           = Cell.Text;
                    EditingPartner.Fax     = Fax.Text;
                    EditingPartner.Address = Address.Text;
                    EditingPartner.IsLegal = IsPartnerLegal.IsToggled;
                    EditingPartner.CalculateVATForThisPerson = CalculateVATForThisPerson.IsToggled;
                    EditingPartner.ChangeDate = DateTime.Now;
                    EditingPartner.Sent       = false;
                    EditingPartner.CreditId   = Credits[CreditPicker.SelectedIndex].Id;

                    DynamicGroups = PartnerGroupSwitchs.Select((a, index) => new { a, index }).ToArray().Where(a => a.a.Value.IsToggled).Select(a => new DynamicGroupPartner()
                    {
                        GroupId   = PartnerGroups[a.index].Id,
                        PartnerId = EditingPartner.Id
                    }).ToArray();

                    if (!DynamicGroups.Any())
                    {
                        return(new ResultSuccess <Partner>(false, "هیچ گروهی انتخاب نشده است."));
                    }

                    //if (!DynamicGroups.Any())
                    //    DynamicGroups = new DynamicGroupPartner[1] { new DynamicGroupPartner()
                    //    {
                    //        GroupId = new Guid("00000000-0000-0000-0000-EEEEEEEEEEEE"),
                    //        PartnerId = EditingPartner.Id
                    //    } };

                    var result = await App.DB.InsertOrUpdateRecordAsync <Partner>(EditingPartner);

                    if (!result.Success)
                    {
                        return(new ResultSuccess <Partner>(false, result.Message));
                    }

                    result = await App.DB.DeletePartnerDynamicGroupsAsync(EditingPartner.Id, EditingPartner.Groups.Select(a => a.Id).ToArray());

                    if (!result.Success)
                    {
                        return(new ResultSuccess <Partner>(false, result.Message));
                    }

                    result = await App.DB.InsertAllRecordsAsync <DynamicGroupPartner>(DynamicGroups);

                    if (!result.Success)
                    {
                        return(new ResultSuccess <Partner>(false, result.Message));
                    }
                }

                if (PartnerListForm != null)
                {
                    await PartnerListForm.FillPartners();
                }
                if (InsertedInformations_Partners != null)
                {
                    await InsertedInformations_Partners.FillPartners();
                }

                return(new ResultSuccess <Partner>(true, "", EditingPartner));
            }
            catch (Exception err)
            {
                return(new ResultSuccess <Partner>(false, err.ProperMessage()));
            }
        }