Exemplo n.º 1
0
        private async void SaveUserOptions_Click(object sender, EventArgs e)
        {
            var userAuthenticator = new UserAuthenticator();
            var userCreds         = userAuthenticator.LoadCredentials();

            var tNames        = FindViewById <EditText>(Resource.Id.tUserNames);
            var tusername     = FindViewById <EditText>(Resource.Id.tUserName);
            var tpasscode     = FindViewById <EditText>(Resource.Id.tUserPassCode);
            var tpasscodAgain = FindViewById <EditText>(Resource.Id.tUserPassCodeAgain);

            if (string.IsNullOrWhiteSpace(tNames.Text) || string.IsNullOrWhiteSpace(tusername.Text) ||
                string.IsNullOrWhiteSpace(tpasscode.Text) || (tpasscode.Text != tpasscodAgain.Text))
            {
                showDialog("Alert", "UserName and Passcode are both required, and Passcodes should match");
                return;
            }

            var uname    = tusername.Text.ToLowerInvariant();
            var passcode = Convert.ToInt32(tpasscode.Text);
            var hash     = userAuthenticator.computeHash(uname, passcode);

            var matchingCred = (from cred in userCreds
                                where cred.UserId == uname
                                select cred).FirstOrDefault();
            AppUser user = null;

            if (matchingCred == null)
            {
                //means we're ading a new user
                Toast.MakeText(this, "Creating new user", ToastLength.Long);
                var id = AppInstance.Instance.LocalEntityStoreInstance.InstanceLocalDb.newId();
                user = new AppUser()
                {
                    Id           = new KindKey(id),
                    EntityId     = new KindKey(id),
                    UserId       = uname,
                    Names        = tNames.Text.ToUpperInvariant(),
                    KnownBolg    = hash,
                    KindMetaData =
                        (new KindMetaData()
                    {
                        chksum = 1,
                        devid = AppInstance.Instance.Configuration.Serial,
                        facidx = 0
                    }
                        ).getJson()
                };
            }
            else
            {
                //confirm with the user
                Toast.MakeText(this, "User found. Updating record", ToastLength.Long);
                user           = matchingCred;
                user.KnownBolg = hash;
                user.Names     = tNames.Text.ToUpperInvariant();
                if (user.EntityId == null)
                {
                    user.EntityId = user.Id;
                }

                if (string.IsNullOrWhiteSpace(user.KindMetaData))
                {
                    user.KindMetaData =
                        (new KindMetaData()
                    {
                        chksum = 1,
                        devid = AppInstance.Instance.Configuration.Serial,
                        facidx = 0
                    }
                        ).getJson();
                }
                else
                {
                    var metadata = new KindMetaData().fromJson(new KindItem(user.KindMetaData));
                    metadata.chksum  += 1;
                    user.KindMetaData = metadata.getJson();
                }
            }

            //we save to the database
            Toast.MakeText(this, "Saving to database", ToastLength.Long);
            var saveableEntity = new DbSaveableEntity(user)
            {
                kindName = UserAuthenticator.KindName
            };

            saveableEntity.Save();

            Toast.MakeText(this, "Changes saved", ToastLength.Long);
            //we reset the form
            tNames.Text        = "";
            tusername.Text     = "";
            tpasscode.Text     = "";
            tpasscodAgain.Text = "";

            //save to cloud
            var dbentity = new DbSaveableEntity(user.asGeneralEntity(UserAuthenticator.KindName))
            {
                kindName = UserAuthenticator.KindName
            };

            AppInstance.Instance.CloudDbInstance.AddToOutQueue(dbentity);
            await AppInstance.Instance.CloudDbInstance.EnsureServerSync(new WaitDialogHelper(this, sendToast));
        }
Exemplo n.º 2
0
        private GeneralEntityDataset getEntityDataset(List <NameValuePair> data, DateTime dateEdited)
        {
            KindKey       kindKey      = null;
            NameValuePair creationDate = null;
            var           metaData     = new KindMetaData()
            {
                chksum = 1,
                devid  = AppInstance.Instance.Configuration.Serial,
                facidx = 0
            };

            //we check if we are in an edit context and read values from there
            if (isInEditMode())
            {
                var jsonOldRecord   = this.Intent.GetStringExtra(Constants.BUNDLE_DATATOEDIT);
                var oldRecordEntity = JsonConvert
                                      .DeserializeObject <GeneralEntityDataset>(jsonOldRecord);
                kindKey      = new KindKey(oldRecordEntity.Id.Value);
                creationDate = oldRecordEntity.GetValue(Constants.SYS_FIELD_DATECREATED);
                if (!string.IsNullOrWhiteSpace(oldRecordEntity.KindMetaData))
                {
                    var oldMetaData = new KindMetaData().fromJson(new KindItem(oldRecordEntity.KindMetaData));
                    metaData.chksum = oldMetaData.chksum + 1;
                }
            }
            else
            {
                kindKey = new KindKey(AppInstance.Instance
                                      .LocalEntityStoreInstance.InstanceLocalDb.newId());
            }

            KindKey entityId = null;

            if (IsRegistrationEndPage())
            {
                //assign a key
                entityId = new KindKey(kindKey.Value);
                //we get the device size
                var moduleClientSummaries = getModuleClientSummaries(data);
                data.AddRange(moduleClientSummaries);
            }
            else
            {
                //also update client details but only if they have changes
                entityId = new KindKey(CurrentClient.EntityId.Value);
            }

            if (creationDate == null)
            {
                data.Add(new NameValuePair()
                {
                    Name  = Constants.SYS_FIELD_DATECREATED,
                    Value = dateEdited.ToString(System.Globalization.CultureInfo.InvariantCulture)
                });
            }

            var editDate = data
                           .Where(t => t.Name.Contains(Constants.SYS_FIELD_DATEEDITED))
                           .FirstOrDefault();

            if (editDate == null)
            {
                data.Add(new NameValuePair()
                {
                    Name  = Constants.SYS_FIELD_DATEEDITED,
                    Value = dateEdited.ToString(System.Globalization.CultureInfo.InvariantCulture)
                });
            }
            data.Add(new NameValuePair()
            {
                Name  = Constants.FIELD_ID,
                Value = kindKey.Value
            });
            data.Add(new NameValuePair()
            {
                Name  = Constants.FIELD_ENTITYID,
                Value = entityId.Value
            });

            var saveable = new GeneralEntityDataset()
            {
                Id           = kindKey,
                EntityId     = entityId,
                FormName     = _kindName.Value,
                FieldValues  = data,
                KindMetaData = metaData.getJson()
            };

            return(saveable);
        }