Beispiel #1
0
        public async Task <ActionResult> AddField(ViewFieldModel model)
        {
            //Defines the properties model key
            _KeyId.SetKey(); //Sets a new properties ObjectID collection;
            string propertiesId = _KeyId.GetKey();

            //First must create properties model;
            PropertiesModel properties = new PropertiesModel()
            {
                ID        = propertiesId,
                Size      = Convert.ToInt32(model.Size),
                Value     = model.Value,
                Maxlength = Convert.ToInt32(model.Maxlength),
                Required  = Convert.ToBoolean(model.Required)
            };

            _KeyId.SetKey(); //Sets a new properties ObjectID collection;
            string fieldId = _KeyId.GetKey();

            //Third creates field model
            FieldModel field = new FieldModel()
            {
                Id         = fieldId,
                Name       = model.Name,
                Type       = model.Type,
                Properties = propertiesId,
                Date       = DateTime.Now.ToLocalTime()
            };

            _Connection.DatabaseConnection();
            _Properties.SetDatabase(_Connection.GetDatabase());
            _Properties.CreateProperties(properties);

            _Field.SetDatabase(_Connection.GetDatabase());
            _Field.CreateField(field);

            _Metadata.SetProcessVersion(model.ProcessID);
            _Metadata.AddFieldToProcess(model.ProcessID, fieldId);

            return(await Task.Run(() => RedirectToAction("Read", "Field", new { ProcessId = model.ProcessID })));
        }
        public async Task <ActionResult> UpdateProcess(MetadataModel viewModel)
        {
            if (viewModel == null) //Se o modelo de dados estiver vazio, redirecciona para a mesma página;
            {
                return(await Task.Run(() => RedirectToAction("Update", "Metadata")));
            }

            _Connection.DatabaseConnection();
            _Field.SetDatabase(_Connection.GetDatabase());
            _Metadata.SetDatabase(_Connection.GetDatabase());
            _GetBranchById.SetDatabase(_Connection.GetDatabase());
            _GetStateById.SetDatabase(_Connection.GetDatabase());
            _Properties.SetDatabase(_Connection.GetDatabase());
            _Log.SetDatabase(_Connection.GetDatabase());

            //1º Passo - Obter os objetos FieldModel e PropertiesModel agregados à versão anterior e passados no Modelo de dados MetadataModel;
            //-----------------------------------------------------
            //Sistema independente - Utils
            //-----------------------------------------------------
            List <string>     fieldIdKeys = new List <string>();     //Armazena a lista de novos ids dos campos do processo atualizado;
            List <FieldModel> fieldClones = new List <FieldModel>(); //Armazena os campos clonados da versão anterior

            foreach (var field in viewModel.Field)
            {
                FieldModel model = _Field.GetField(field);
                fieldClones.Add(model);
            }

            foreach (var fieldCloned in fieldClones)
            {
                PropertiesModel model = _Properties.GetProperties(fieldCloned.Properties);
                _KeyID.SetKey();                     //Gera um novo object id para criar uma nova coleção na tabela de propriedades;
                model.ID = _KeyID.GetKey();          //Afecta o novo identificador object id ao modelo de dados properties;
                _Properties.CreateProperties(model); //cria um novo modelo de dados do tipo propriedades;
                fieldCloned.Properties = model.ID;   //Afecta o id dessas propriedades criadas ao campo do novo processo

                _KeyID.SetKey();                     //Gera um novo object id para criar uma nova coleção na tabela de campos;
                fieldCloned.Id = _KeyID.GetKey();    //Afecta o novo identificador object id ao modelo de dados properties;
                fieldIdKeys.Add(fieldCloned.Id);     //Armazena na lista de novas keys referentes aos campos clonados o id do campo clonado;
                _Field.CreateField(fieldCloned);     //cria um novo modelo de dados do tipo campos;
            }
            //-----------------------------------------------------

            //2º Passo - obter a designação dos branches em que se encontra o processo;
            List <string> branches = new List <string>();

            foreach (var branch in viewModel.Branch)
            {
                branches.Add(_GetBranchById.GetBranchID(branch));
            }

            //3º Passo - Cria e armazena na base de dados uma nova versão do processo atualizado;
            MetadataModel UpdatedMetadataModel = new MetadataModel()
            {
                Id      = viewModel.Id,
                Name    = viewModel.Name,
                Version = viewModel.Version,
                Date    = Convert.ToDateTime(viewModel.Date),
                State   = _GetStateById.GetStateID(viewModel.State),
                Field   = fieldIdKeys,
                Branch  = branches
            };

            /*
             * -------------------------------------------------------------------------------------
             * Log section
             * -------------------------------------------------------------------------------------
             */
            _KeyID.SetKey(); //Generates a log model object id (unique key)
            _Log.CreateProcessLog(_KeyID.GetKey(), viewModel.Id, viewModel.Name, viewModel.Version, "Update");
            //--------------------------------------------------------------------------------------

            _Metadata.CreateMetadata(UpdatedMetadataModel); //armazena o processo na base de dados;

            return(await Task.Run(() => RedirectToAction("Read", "Field", new { ProcessId = viewModel.Id })));
        }