/// <summary> /// Load the registration data from a JSON string /// </summary> /// <param name="serializedString">The JSON string</param> public override void SetData(string serializedString) { if (!serializedString.IsBlank()) { this.personRegistrationInfo = JsonConvert.DeserializeObject <Mkopa.Core.BL.Models.People.Customer>(serializedString); if (this.personRegistrationInfo.Product == null) { this.personRegistrationInfo.Product = new Product(); } } }
/// <summary> /// Creates the view for this fragment /// </summary> /// <param name="inflater">The inflator</param> /// <param name="container">The container</param> /// <param name="savedInstanceState">The saved state</param> /// <returns>The view</returns> public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.view = base.OnCreateView(inflater, container, savedInstanceState); this.savingProgress = SavingProgress.NotStarted; this.view = inflater.Inflate(Resource.Layout.fragment_layout_select_product_buttons, container, false); if (savedInstanceState != null) { string regInfo = savedInstanceState.GetString(BundledRegistrationInfo); if (!regInfo.IsBlank()) { this.personRegistrationInfo = JsonConvert.DeserializeObject <Mkopa.Core.BL.Models.People.Customer>(regInfo); } } this.InitializeUI(); return(this.view); }
/// <summary> /// Called to save a customer to the device /// </summary> /// <param name="e">The event arguments</param> /// <param name="smsSendAttempts">Number of attempts</param> /// <param name="smsAttemptLimit">The Limit</param> /// <returns>An empty task</returns> private async Task SaveCustomerToDevice(CustomerService.RegistrationStatusChangedEventArgs e, int smsSendAttempts, int smsAttemptLimit) { bool succeeded = e.SmsRegistrationSucceeded || e.Response.RegistrationSuccessful; if (!succeeded) { this.Logger.Debug(string.Format("Sms send attempts = {0} and sms send limts = {1}", smsSendAttempts, smsAttemptLimit)); succeeded = e.Channel == DataChannel.Fallback && smsAttemptLimit == smsSendAttempts; if (!succeeded) { return; } } this.Logger.Debug("Attempting to save customer to device"); if (e.Response == null || e.Response.Customer == null) { return; } ProspectsController prospectsController = new ProspectsController(); Mkopa.Core.BL.Models.People.Prospect prospect = await prospectsController .GetByPhoneNumberAsync(e.Response.Customer.Phone); await Resolver.Instance.Get <ISQLiteDB>().Connection.RunInTransactionAsync( async(SQLiteConnection connTran) => { try { this.Logger.Debug("Trying to save customer"); CustomersController customersController = new CustomersController(); e.Response.Customer.Channel = e.Channel; string customerPhone = e.Response.Customer.Phone; Guid custGuid; Mkopa.Core.BL.Models.People.Customer customer = await customersController.GetSingleByCriteria(CriteriaBuilder.New() .Add("Phone", customerPhone)); // customer to have more than one product if (customer == null || customer.Id == default(Guid)) { SaveResponse <Mkopa.Core.BL.Models.People.Customer> saveResponse = await customersController.SaveAsync(connTran, e.Response.Customer, true); if (saveResponse.SavedModel == null || saveResponse.SavedModel.Id == default(Guid)) { new ReusableScreens(this.Activity) .ShowInfo( Resource.String.customer_save_err_actionbar, Resource.String.customer_save_err_title, Resource.String.customer_save_err_message, Resource.String.customer_save_err_button); return; } custGuid = saveResponse.SavedModel.Id; } else { custGuid = customer.Id; } await this.SaveCustomerProductToDevice(custGuid, connTran); if (prospect != null) { this.Logger.Debug("There was a prospect with the same number so we convert to customer"); prospect.Converted = true; await prospectsController.SaveAsync(connTran, prospect); } RecordStatus syncStatus = e.Channel == DataChannel.Fallback ? (e.SmsRegistrationSucceeded ? RecordStatus.FallbackSent : RecordStatus.Pending) : RecordStatus.Synced; SyncingController syncController = new SyncingController(); SyncRecord syncRec = await syncController.GetSyncRecordAsync(e.Response.Customer.RequestId); this.Logger.Debug("Fetching sync record for customer"); if (syncRec == null) { this.Logger.Debug("The sync record is null so we generate one"); syncRec = new SyncRecord { ModelId = e.Response.Customer.Id, ModelType = e.Response.Customer.TableName, Status = syncStatus, RequestId = e.Response.Customer.RequestId }; this.Logger.Debug("Saving generated sync record"); SaveResponse <SyncRecord> syncSaveResponse = await syncController.SaveAsync( connTran, syncRec); this.Logger.Debug("Sync record was saved correctly"); } else { syncRec.Status = syncStatus; } await syncController.SaveAsync(connTran, syncRec); } catch (Exception exception) { this.Logger.Error(exception); } }); }