public int addAccountRange(AccountRangeDTO accountRange)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("INSERT INTO AccountRanges");
            query.AppendLine("(CompanyId, CodeFrom, CodeTo, AccountTypeId, CurrentAccount, Name, Removable)");
            query.AppendLine("VALUES (@companyId, @codeFrom, @codeTo, @accountTypeId, @currentAccount, @name, @removable);");
            query.AppendLine("SELECT SCOPE_IDENTITY();");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = CommandType.Text;

            command.Parameters.AddWithValue("@companyId", accountRange.CompanyId);
            command.Parameters.AddWithValue("@codeFrom", accountRange.CodeFrom);
            command.Parameters.AddWithValue("@codeTo", accountRange.CodeTo);
            command.Parameters.AddWithValue("@accountTypeId", accountRange.Type.Id);
            command.Parameters.AddWithValue("@currentAccount", accountRange.CurrentAccount);
            command.Parameters.AddWithValue("@name", accountRange.Name);
            command.Parameters.AddWithValue("@removable", accountRange.Removable);

            int id;

            try
            {
                this.conection.Open();
                id = (int)(decimal)command.ExecuteScalar();
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }

            return id;
        }
 public FormAccounts(DataValidation dataValidation, AccountRangeDTO accountRange)
 {
     this.dataValidation = dataValidation;
     this.accountRange = accountRange;
     InitializeComponent();
     this.dgvAccounts.AutoGenerateColumns = false;
     this.updateDataGrid();
 }
        public FormAddAccount(DataValidation dataValidation, AccountRangeDTO accountRange)
        {
            this.dataValidation = dataValidation;
            this.accountRange = accountRange;
            InitializeComponent();
            this.nudCode.Minimum = accountRange.CodeFrom;
            this.nudCode.Maximum = accountRange.CodeTo;

            this.validationsAccount = new Dictionary<Control, ErrorProvider>();
            this.validationsAccount.Add(tbName, epAccount);
        }
 public FormModifyAccount(DataValidation dataValidation, AccountRangeDTO accountRange, AccountDTO account)
     : base(dataValidation, accountRange)
 {
     this.account = account;
     InitializeComponent();
     this.Text = "Modificación de cuenta";
     this.bAccept.Text = "Modificar";
     this.nudCode.Value = account.Code;
     this.tbName.Text = account.Name;
     this.cbRegularizingAccount.Checked = account.RegularizingAccount;
 }
 public void deleteAccountRange(AccountRangeDTO accountRange)
 {
     this.data.deleteAccountRange(accountRange);
 }
 public List<AccountDTO> selectAccounts(AccountRangeDTO accountRange)
 {
     return this.data.selectAccounts(accountRange);
 }
 public void saveAccountRange(AccountRangeDTO accountRange)
 {
     string name = this.getNameOfAccountRangeOverlapped(accountRange);
     if (name != null)
         throw new ArgumentException(String.Format("El rango ingresado se superpone con '{0}'", name));
     if (accountRange.Id == null)
     {
         accountRange.Id = this.data.addAccountRange(accountRange);
     }
     else
     {
         this.data.modifyAccountRange(accountRange);
     }
 }
 public string getNameOfAccountRangeOverlapped(AccountRangeDTO accountRange)
 {
     return this.data.getNameOfAccountRangeOverlapped(accountRange);
 }
        public List<AccountDTO> selectAccounts(AccountRangeDTO accountRange)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("SELECT Id, Code, AccountRangeId, Deleted, RegularizingAccount, Name FROM Accounts");
            query.AppendLine("WHERE AccountRangeId = @accountRangeId");
            query.AppendLine("ORDER BY ID;");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = System.Data.CommandType.Text;

            command.Parameters.AddWithValue("@accountRangeId", accountRange.Id);

            List<AccountDTO> accounts = new List<AccountDTO>();
            try
            {
                this.conection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            AccountDTO account = new AccountDTO((int)reader["Id"], (int)reader["Code"], reader["Name"].ToString(), accountRange, (bool)reader["RegularizingAccount"], (bool)reader["Deleted"]);
                            accounts.Add(account);
                        }
                    }
                }
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }

            return accounts;
        }
        public List<AccountRangeDTO> selectAccountRangesByCompanyId(int companyId)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("SELECT AR.Id, CompanyId, AR.Name, CodeFrom, CodeTo, AT.Id AccountTypeId, AT.Type AccountType, BT.Id BalanceTypeId, BT.Type BalanceType, CurrentAccount, Removable FROM AccountRanges AR");
            query.AppendLine("INNER JOIN AccountType AT ON AR.AccountTypeId = AT.Id");
            query.AppendLine("INNER JOIN BalanceType BT ON AT.BalanceTypeId = BT.Id");
            query.AppendLine("WHERE CompanyId = @companyId");
            query.AppendLine("ORDER BY CodeFrom;");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = System.Data.CommandType.Text;

            command.Parameters.AddWithValue("@companyId", companyId);

            List<AccountRangeDTO> accountRanges = new List<AccountRangeDTO>();
            try
            {
                this.conection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            AccountRangeDTO accountRange = new AccountRangeDTO(
                                (int)reader["Id"], (int)reader["CompanyId"], reader["Name"].ToString(), (int)reader["CodeFrom"],
                                (int)reader["CodeTo"], new AccountTypeDTO((int)reader["AccountTypeId"],
                                   new BalanceTypeDTO((int)reader["BalanceTypeId"], reader["BalanceType"].ToString()), reader["AccountType"].ToString()),
                                   (bool)reader["CurrentAccount"], (bool)reader["Removable"]);
                            accountRanges.Add(accountRange);
                        }
                    }
                }
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }

            return accountRanges;
        }
        public AccountRangeDTO selectAccountRange(AccountRangeTemplatesEnum accountRange, int companyId)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("SELECT AR.Id, CompanyId, AR.Name, AR.CodeFrom, AR.CodeTo, AT.Id AccountTypeId, AT.Type AccountType, BT.Id BalanceTypeId, BT.Type BalanceType, AR.CurrentAccount, AR.Removable FROM AccountRanges AR");
            query.AppendLine("INNER JOIN AccountType AT ON AR.AccountTypeId = AT.Id");
            query.AppendLine("INNER JOIN BalanceType BT ON AT.BalanceTypeId = BT.Id");
            query.AppendLine("INNER JOIN AccountRangeTemplates ART ON ART.Id = @accountRangeTemplateId");
            query.AppendLine("WHERE CompanyId = @companyId AND AR.Name = ART.Name;");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = System.Data.CommandType.Text;

            command.Parameters.AddWithValue("@companyId", companyId);
            command.Parameters.AddWithValue("@accountRangeTemplateId", (int)accountRange);

            AccountRangeDTO result = null;
            try
            {
                this.conection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    reader.Read();
                    result = new AccountRangeDTO(
                       (int)reader["Id"], companyId, reader["Name"].ToString(), (int)reader["CodeFrom"],
                       (int)reader["CodeTo"], new AccountTypeDTO((int)reader["AccountTypeId"],
                          new BalanceTypeDTO((int)reader["BalanceTypeId"], reader["BalanceType"].ToString()), reader["AccountType"].ToString()),
                          (bool)reader["CurrentAccount"], (bool)reader["Removable"]);
                }
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }

            return result;
        }
        public void modifyAccountRange(AccountRangeDTO accountRange)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("UPDATE AccountRanges");
            query.AppendLine("SET CompanyId = @companyId, CodeFrom = @codeFrom, CodeTo = @codeTo, AccountTypeId = @accountTypeId, Name = @name, CurrentAccount = @currentAccount, Removable = @removable");
            query.AppendLine("WHERE Id = @id;");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = CommandType.Text;

            command.Parameters.AddWithValue("@id", accountRange.Id);
            command.Parameters.AddWithValue("@companyId", accountRange.CompanyId);
            command.Parameters.AddWithValue("@codeFrom", accountRange.CodeFrom);
            command.Parameters.AddWithValue("@codeTo", accountRange.CodeTo);
            command.Parameters.AddWithValue("@accountTypeId", accountRange.Type.Id);
            command.Parameters.AddWithValue("@currentAccount", accountRange.CurrentAccount);
            command.Parameters.AddWithValue("@name", accountRange.Name);
            command.Parameters.AddWithValue("@removable", accountRange.Removable);

            try
            {
                this.conection.Open();
                command.ExecuteNonQuery();
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }
        }
        public string getNameOfAccountRangeOverlapped(AccountRangeDTO accountRange)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("SELECT Name FROM AccountRanges");
            query.AppendLine("WHERE Id != @id AND CompanyId = @idCompany AND ((CodeFrom BETWEEN @codeFrom AND @codeTo) OR (CodeTo BETWEEN @codeFrom AND @codeTo));");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = System.Data.CommandType.Text;

            if (accountRange.Id != null)
                command.Parameters.AddWithValue("@id", accountRange.Id);
            else
                command.Parameters.AddWithValue("@id", SqlInt32.Null);
            command.Parameters.AddWithValue("@idCompany", accountRange.CompanyId);
            command.Parameters.AddWithValue("@codeFrom", accountRange.CodeFrom);
            command.Parameters.AddWithValue("@codeTo", accountRange.CodeTo);

            string name;
            try
            {
                this.conection.Open();
                object obj = command.ExecuteScalar();
                name = obj == null ? null : obj.ToString();
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }

            return name;
        }
        public void deleteAccountRange(AccountRangeDTO accountRange)
        {
            StringBuilder query = new StringBuilder();
            query.AppendLine("DELETE FROM AccountRanges");
            query.AppendLine("WHERE Id = @id;");

            SqlCommand command = new SqlCommand(query.ToString(), this.conection);
            command.CommandType = CommandType.Text;

            command.Parameters.AddWithValue("@id", accountRange.Id);

            try
            {
                this.conection.Open();
                command.ExecuteNonQuery();
            }
            finally
            {
                if (this.conection.State == ConnectionState.Open)
                    this.conection.Close();
            }
        }