/// <summary>
        /// Load form with initial settings and hidden buttons
        /// </summary>
        private void LoadInitialForm()
        {
            this.model = new INVESTORS_FUNDS();

            this.comboTypePerson.DataSource = _typesRepo.GetAll <string>(null, x => x.TYPE);
            this.comboEmployee.DataSource   = new List <string>()
            {
                "СЛУЖИТЕЛ", "ПЪЛНОМОЩНИК", "НЕПРИЛОЖИМО"
            };
            this.comboRegisterCd.DataSource = new List <string>()
            {
                "ДА", "НЕ"
            };
            this.comboDds.DataSource = new List <string>()
            {
                "ДА", "НЕ"
            };
            this.comboMailCountry.DataSource = _countriesRepo.GetAll <string>(null, x => x.COUNTRY);
            this.comboPersCountry.DataSource = _countriesRepo.GetAll <string>(null, x => x.COUNTRY);
            this.comboMailTown.DataSource    = _townsRepo.GetAll <string>(null, x => x.TOWNNAME);
            this.comboPersTown.DataSource    = _townsRepo.GetAll <string>(null, x => x.TOWNNAME);
            this.comboPersMunic.DataSource   = _municRepo.GetAll <string>(null, x => x.MUNICIPALITY1);
            this.comboMailMunic.DataSource   = _municRepo.GetAll <string>(null, x => x.MUNICIPALITY1);

            this.buttonClientDelete.Visible = false;
            this.buttonClientSave.Visible   = false;

            this.labelClientId.Visible = false;
            this.textClientId.Visible  = false;

            this.labelStatus.Visible = false;
            this.tеxtStatus.Visible  = false;
        }
        private void buttonClientSave_Click(object sender, EventArgs e)
        {
            var idText = this.textId.Text;

            if (!this.CheckPrimaryFields(idText))
            {
                return;
            }

            model = this.CreateModelFromForm();

            if (this.newClient == true)
            {
                this._investorsFundsRepo.Add(model);
            }
            else
            {
                this._investorsFundsRepo.Update(model);
            }

            try
            {
                this._uow.Commit();
                MessageBox.Show("Записът е успешен!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Неуспешен запис! Опитайте отново!" + "\n" + ex.Message);
            }
        }
        /// <summary>
        /// when row clicked load data to fields
        /// </summary>
        private void dataGrid_DoubleClick(object sender, System.EventArgs e)
        {
            if (dataGrid.CurrentRow.Index != -1)
            {
                int id = (int)dataGrid.CurrentRow.Cells["columnId"].Value;
                model = this._investorsFundsRepo.GetById(id);

                this.PopulateFormFromModel(model);
            }
        }
        /// <summary>
        /// Takes all information about selected client and populates fields of form
        /// </summary>
        private void PopulateFormFromModel(INVESTORS_FUNDS model)
        {
            // initial info
            this.textId.Text = model.PERSONALID_BULSTAT;
            this.comboTypePerson.SelectedIndex = comboTypePerson.FindStringExact(model.TYPE_PERSON);
            this.comboEmployee.SelectedIndex   = comboEmployee.FindStringExact(model.EMPLOYEE_AUTHORISED);
            this.comboRegisterCd.SelectedIndex = comboRegisterCd.FindStringExact(model.CD_REG);
            this.tеxtStatus.Text   = model.CL_STATUS;
            this.textClientId.Text = model.CLIENTID_STRING;

            // address
            this.comboMailCountry.SelectedIndex = comboMailCountry.FindStringExact(model.COUNTRY_ADDRESS_ID);
            this.comboPersCountry.SelectedIndex = comboPersCountry.FindStringExact(model.COUNTRY1);
            this.comboMailTown.SelectedIndex    = comboMailTown.FindStringExact(model.TOWN_ADDRESS_ID);
            this.comboPersTown.SelectedIndex    = comboPersTown.FindStringExact(model.TOWN1);
            this.comboMailMunic.SelectedIndex   = comboMailMunic.FindStringExact(model.MUNICIPALITY);
            this.comboPersMunic.SelectedIndex   = comboPersMunic.FindStringExact(model.MUNICIPALITY);

            this.textPersStreet.Text  = model.STREET;
            this.textMailAddress.Text = model.ADDRESS_ID;
            this.textPersDistr.Text   = model.RESIDENCE;
            this.textPersStrNum.Text  = model.STRNUM;
            this.textPersApt.Text     = model.FLAT;
            this.textPersFloor.Text   = model.FLOOR1;

            // person
            this.textFirstName.Text  = model.FIRSTNAME;
            this.textMiddleName.Text = model.SECONDNAME;
            this.textFamilyName.Text = model.LASTNAME;

            this.dateTimeBirthDate.Value      = this.normalizeDate(model.CLIENT_BIRTHDATE);
            this.textPassportNumber.Text      = model.PERSONAL_ID;
            this.dateTimePassportIssued.Value = this.normalizeDate(model.PERSONAL_ID_DATE);
            this.textPassportIssued.Text      = model.PERSONAL_ID_ISSUED_BY;

            // company
            this.textCompanyName.Text       = model.FULL_NAME;
            this.textCompanyTaxId.Text      = model.ID_NUMBER_TAX_ID;
            this.comboDds.SelectedIndex     = comboDds.FindStringExact(model.DDS_REGISTERED);
            this.comboOrgType.SelectedIndex = comboOrgType.FindStringExact(model.TYPE_ORGANIZATION);

            // bank accounts
            this.textIban1.Text     = model.IBAN1;
            this.textBicCode1.Text  = model.BIC1;
            this.textBankName1.Text = model.BANK1;

            this.textIban2.Text     = model.IBAN2;
            this.textBicCode2.Text  = model.BIC2;
            this.textBankName2.Text = model.BANK2;

            this.textIban3.Text     = model.IBAN3;
            this.textBicCode3.Text  = model.BIC3;
            this.textBankName3.Text = model.BANK3;

            // other data
            this.textEmail.Text      = model.E_MAIL;
            this.textPhone.Text      = model.TEL_FIXED;
            this.textMobile.Text     = model.TEL_MOBILE;
            this.textGlobalIdCd.Text = model.CD_GLOBID.ToString();
            this.textBicCodeCd.Text  = model.CD_BIC;

            // attorney data
            this.textAttorneyType.Text   = model.AUTHORISED_TYPE;
            this.textAttorneyDoc.Text    = model.AUTHORISED_DOC;
            this.dateTimeAttorney.Value  = this.normalizeDate(model.AUTHORISED_DATE);
            this.textAttorneyNotary.Text = model.AUTH_NOTARY;

            // show hidden buttons
            this.buttonClientDelete.Visible = true;
            this.buttonClientSave.Visible   = true;

            // show client number and status if existing
            this.labelClientId.Visible = true;
            this.textClientId.Visible  = true;

            this.labelStatus.Visible = true;
            this.tеxtStatus.Visible  = true;

            this.buttonClientSave.Text = "ОБНОВИ";

            this.ChangeFormForPersonType();
        }
        /// <summary>
        /// Takes all information about client from form and creates data model
        /// </summary>
        private INVESTORS_FUNDS CreateModelFromForm()
        {
            var md = new INVESTORS_FUNDS();

            // TODO: set user modified - use identity

            // TODO: create this here - do not use field!
            if (this.newClient)
            {
                md.CLIENTID_STRING = "noClString";
            }
            else
            {
                md.CLIENTID_STRING = this.textClientId.Text;
            }

            md.CLIENTID            = this._investorsFundsRepo.GetAll <int>(null, x => x.CLIENTID).Max() + 1;
            md.PERSONALID_BULSTAT  = this.textId.Text;
            md.TYPE_PERSON         = this.comboTypePerson.Text;
            md.EMPLOYEE_AUTHORISED = this.comboEmployee.Text;
            md.CD_REG = this.comboRegisterCd.Text;

            // address
            md.COUNTRY_ADDRESS_ID = this.comboMailCountry.Text;
            md.COUNTRY1           = this.comboPersCountry.Text;
            md.TOWN_ADDRESS_ID    = this.comboMailTown.Text;
            md.TOWN1        = this.comboPersTown.Text;
            md.MUNICIPALITY = this.comboMailMunic.Text;

            md.STREET     = this.textPersStreet.Text;
            md.ADDRESS_ID = this.textMailAddress.Text;
            md.RESIDENCE  = this.textPersDistr.Text;
            md.STRNUM     = this.textPersStrNum.Text;
            md.FLAT       = this.textPersApt.Text;
            md.FLOOR1     = this.textPersFloor.Text;

            // person
            md.FIRSTNAME  = this.textFirstName.Text;
            md.SECONDNAME = this.textMiddleName.Text;
            md.LASTNAME   = this.textFamilyName.Text;

            md.CLIENT_BIRTHDATE      = this.dateTimeBirthDate.Text;
            md.PERSONAL_ID           = this.textPassportNumber.Text;
            md.PERSONAL_ID_DATE      = this.dateTimePassportIssued.Text;
            md.PERSONAL_ID_ISSUED_BY = this.textPassportIssued.Text;

            // company
            md.FULL_NAME         = this.textCompanyName.Text;
            md.ID_NUMBER_TAX_ID  = this.textCompanyTaxId.Text;
            md.DDS_REGISTERED    = this.comboDds.Text;
            md.TYPE_ORGANIZATION = this.comboOrgType.Text;

            // bank accounts
            md.IBAN1 = this.textIban1.Text;
            md.BIC1  = this.textBicCode1.Text;
            md.BANK1 = this.textBankName1.Text;

            md.IBAN2 = this.textIban2.Text;
            md.BIC2  = this.textBicCode2.Text;
            md.BANK2 = this.textBankName2.Text;

            md.IBAN3 = this.textIban3.Text;
            md.BIC3  = this.textBicCode3.Text;
            md.BANK3 = this.textBankName3.Text;

            // other data
            md.E_MAIL     = this.textEmail.Text;
            md.TEL_FIXED  = this.textPhone.Text;
            md.TEL_MOBILE = this.textMobile.Text;
            md.CD_GLOBID  = int.Parse(this.textGlobalIdCd.Text);
            md.CD_BIC     = this.textBicCodeCd.Text;

            // attorney data
            md.AUTHORISED_TYPE = this.textAttorneyType.Text;
            md.AUTHORISED_DOC  = this.textAttorneyDoc.Text;
            md.AUTHORISED_DATE = this.dateTimeAttorney.Text;
            md.AUTH_NOTARY     = this.textAttorneyNotary.Text;

            // select authorised

            md.CL_STATUS = "OK";

            return(md);
        }
        public ActionResult Register(ClientRegisterViewModel model)
        {
            var id = this.User.Identity.GetUserId();

            if (!this.ModelState.IsValid)
            {
                return(this.View(model));
            }

            // проверка за физическо или юридическо лице и създаване на FULL_NAME
            if (model.TYPE_PERSON == GlobalConstants.PerTypes[0] ||
                model.TYPE_PERSON == GlobalConstants.PerTypes[2])
            {
                model.FULL_NAME = model.FirmName;
            }
            else
            {
                model.FULL_NAME = $"{model.FIRSTNAME} {model.SECONDNAME} {model.LASTNAME}";
            }

            // TODO: създаване на тези неща
            model.CREATED_BY   = int.Parse(id);
            model.CREATED_WHEN = DateTime.Now.ToString();

            var clientNewId = this.clients.GetNewId();

            model.CLIENTID = clientNewId;

            var tempStr  = "000000";
            var i2       = tempStr.Length - clientNewId.ToString().Length;
            var tempstr2 = tempStr.Substring(0, i2);
            var clstring = "AC";

            model.CLIENTID_STRING = clstring + tempstr2.ToString() + clientNewId.ToString();

            /*Dim rst As ADODB.Recordset
             * myuser = conn_sql.myuser   '' DLookup("[user]", "current_user")
             * 'mypass = DLookup("[pass]", "current_user")
             * Dim userid As Integer
             * userid = conn_sql.userid   ''DLookup("[user_int]", "current_user")
             * 'Call CONNECT_SQL
             * 'conn.Open MYCONN
             * ''''''''''''''''''''''''''''''''''''''''''''''''''''
             * Dim udid As String
             * udid = conn_sql.udid '' Trim(DLookup("[udid]", "tblcurrentud"))
             * ''''''''''''''''''''''''''''''''''''''''''''''''''''
             *
             *
             * '////////////////////////////////////////////////////////////////
             * Dim i As Double
             * rst = conn.Execute("exec sp_getmaxinvid")
             * If rst.EOF Then
             * i = 1
             * Else
             * i = rst.Fields("max_id").Value
             * i = i + 1
             * End If
             *
             * '////////////////////////////////////////////////////////////////
             * 'GET USER CLIENT STRING
             * Dim clstring As String
             * rst = conn.Execute("exec sp_getuserstring " _
             * & userid & "")
             * If rst.EOF Then
             * MsgBox("Не мога да намеря код за потребителя!")
             * Exit Sub
             * Else
             * clstring = rst.Fields("strindex").Value
             * End If
             * '///////////////////////////////////////////////////////////////
             * Dim tempstr As String
             * Dim tempstr2 As String
             * Dim i2 As Integer
             * Dim clidstring As String
             *
             *
             * If udid = "AC" Then
             * tempstr = "000000"
             * i2 = Len(tempstr) - Len(Trim(i))
             * tempstr2 = msvb.Left(tempstr, i2)
             * clidstring = clstring & "-" & tempstr2 & i
             * Else
             * tempstr = "000000"
             * i2 = Len(tempstr) - Len(Trim(i))
             * tempstr2 = msvb.Left(tempstr, i2)
             * clidstring = clstring & tempstr2 & i
             * End If
             *
             *
             * '///////////////////////////////////////////////////////////////////
             * Dim fullnm As String
             * If Me.cmbPERTYPE.Text = "БЪЛГАРСКО ФИЗИЧЕСКО ЛИЦЕ" Or Me.cmbPERTYPE.Text = "ЧУЖДО ФИЗИЧЕСКО ЛИЦЕ" Then
             * fullnm = Me.txtFNAME.Text & " " & Me.txtSNAME.Text & " " & Me.txtLNAME.Text
             * Else
             * fullnm = Me.txtNAME.Text
             * End If
             * '///////////////////////////////////////////////////////////////////
             * Dim crwhen As Date
             * crwhen = Now()
             * '///////////////////////////////////////////////////////////////////
             *
             * Dim dcit As String
             * If Me.checkRES.Checked = True Then
             * dcit = "YES"
             * Else
             * dcit = "NO"
             * End If*/
            var newClient = new INVESTORS_FUNDS();

            this.Mapper.Map(model, newClient);
            this.clients.CreateClient(newClient);
            return(this.RedirectToAction("Index", "Home"));
        }