Esempio n. 1
0
        private async Task <int> GetNextPatientId()
        {
            try
            {
                await conn.OpenAsync();

                var cmd = new OleDbCommand
                {
                    Connection  = conn,
                    CommandText = "SELECT MAX(Id) FROM [Patienten$]"
                };

                var res = await cmd.ExecuteScalarAsync();

                var maxId = res == DBNull.Value ? 0 : Convert.ToInt32(res);

                return(maxId + 1);
            }
            catch (Exception ex)
            {
                throw new Exception($"Error occured while searching next patients id.", ex);
            }
            finally
            {
                if (conn.State == System.Data.ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Tests the connection asynchronously.
 /// </summary>
 /// <returns></returns>
 public override async Task TestConnectionAsync()
 {
     using (var cmd = new OleDbCommand("SELECT 1", m_Connection))
     {
         cmd.Transaction = m_Transaction;
         await cmd.ExecuteScalarAsync();
     }
 }
 internal async Task ReloadAsync(OleDbConnection connection, OleDbTransaction transaction)
 {
     using (var cmd = new OleDbCommand("SELECT @@Options")
     {
         Connection = connection, Transaction = transaction
     })
         m_Options = (int)(await cmd.ExecuteScalarAsync());
 }
Esempio n. 4
0
 public async Task <DateTime> GetTimestampAsync()
 {
     using (await _lock.LockAsync())
     {
         var command = new OleDbCommand("select v from Timestam", _conn);
         return(DateTime.Parse((string)await command.ExecuteScalarAsync()));
     }
 }
Esempio n. 5
0
 public async Task <string> GetTrackAsync()
 {
     using (await _lock.LockAsync())
     {
         var command = new OleDbCommand("select name from Track", _conn);
         return((string)await command.ExecuteScalarAsync());
     }
 }
 /// <summary>
 /// Tests the connection asynchronously.
 /// </summary>
 /// <returns></returns>
 public override async Task TestConnectionAsync()
 {
     using (var cmd = new OleDbCommand("SELECT 1", m_Connection))
     {
         if (m_Transaction != null)
         {
             cmd.Transaction = m_Transaction;
         }
         await cmd.ExecuteScalarAsync().ConfigureAwait(false);
     }
 }
Esempio n. 7
0
        /// <summary>
        /// Получение списка выплат и удержаний.
        /// </summary>
        private async Task <List <Pay> > GetPayAsync(OleDbConnection oleDbConnection, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var sql = $"SELECT Snu_rn, Num, Code, Nick, Name FROM Zsnu";

            var result = new List <Pay>();

            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = "SELECT COUNT(*) FROM Zsnu", Connection = oleDbConnection
            })
            {
                AddCount = 0;
                int allRecords = Convert.ToInt32(await cmd.ExecuteScalarAsync());
                LoadData?.Invoke(this, new Tuple <string, int, bool>("Выплаты и удержания:", allRecords, true));
            }

            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = sql, Connection = oleDbConnection
            })
            {
                using (var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false))
                {
                    while (await reader.ReadAsync(token).ConfigureAwait(false))
                    {
                        var rn              = reader[0].ToString().Trim();
                        var number          = Convert.ToInt32(reader[1]);
                        var mnemo           = reader[2].ToString().Trim();
                        var abbreviatedName = reader[3].ToString().Trim();
                        var name            = reader[4].ToString().Trim();

                        result.Add(new Pay()
                        {
                            Rn              = rn,
                            Number          = number,
                            Memo            = mnemo,
                            AbbreviatedName = abbreviatedName,
                            Name            = name
                        });

                        AddCount++;
                        ReaderEvent?.Invoke(this, AddCount);
                    }
                }
            }

            LoadData?.Invoke(this, new Tuple <string, int, bool>(string.Empty, 0, false));
            return(result);
        }
Esempio n. 8
0
        public static async Task <long> NrRows(string pathToExcel, string SheetName = "[Sheet1$]")
        {
            using (var m = new OleDbConnection())
            {
                m.ConnectionString = ExcelHelpers.BuildExcelConnectionString(pathToExcel, false);
                await m.OpenAsync();

                var query = @"Select count(*) From " + SheetName;
                using (var cmd = new OleDbCommand(query, m))
                {
                    var dr = await cmd.ExecuteScalarAsync();

                    return(long.Parse(dr.ToString()));
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Получение Категорий ФОТ.
        /// </summary>
        private async Task <List <string> > GetPayrollsAsync(OleDbConnection oleDbConnection, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var sql = $"SELECT Code FROM Zkatfzp";

            var result = new List <string>();


            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = "SELECT COUNT(*) FROM Zkatfzp", Connection = oleDbConnection
            })
            {
                AddCount = 0;
                int allRecords = Convert.ToInt32(await cmd.ExecuteScalarAsync());
                LoadData?.Invoke(this, new Tuple <string, int, bool>("Категорий ФОТ:", allRecords, true));
            }

            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = sql, Connection = oleDbConnection
            })
            {
                using (var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false))
                {
                    while (await reader.ReadAsync(token).ConfigureAwait(false))
                    {
                        var mnemo = reader[0].ToString().Trim();
                        result.Add(mnemo);

                        AddCount++;
                        ReaderEvent?.Invoke(this, AddCount);
                    }
                }
            }

            LoadData?.Invoke(this, new Tuple <string, int, bool>(string.Empty, 0, false));
            return(result);
        }
Esempio n. 10
0
        /// <summary>
        /// Получение фактически отработанного рабочего времени.
        /// </summary>
        private async Task <decimal?> GetActualHoursWorked(string fcacRn, int year, Month month, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var dateSince = new DateTime(year, (int)month, 1);
            var dateTo    = dateSince.AddMonths(1).AddDays(-1);

            var starDate = $"DATE({dateSince.Year}, {dateSince.Month}, {dateSince.Day})";
            var endDate  = $"DATE({dateTo.Year}, {dateTo.Month}, {dateTo.Day})";

            var result = 0.00;

            foreach (var item in ReportSettings.settings.TypeOfDays)
            {
                var sql = $"SELECT SUM(hourqnt) AS ssum FROM zfcacwth " +
                          $"WHERE fcac_rn = '{fcacRn}' AND hrtype_rn = '{item.Substring(0, 4)}' AND date >= {starDate} AND date <= {endDate} " +
                          $"AND date NOT IN (SELECT date FROM zfcacwtd WHERE fcac_rn = '{fcacRn}' AND date >= {starDate} AND date <= {endDate}) AND NOT DELETED()";

                using (OleDbCommand cmd = new OleDbCommand()
                {
                    CommandText = sql, Connection = dbConnectionAsync
                })
                {
                    var execute = await cmd.ExecuteScalarAsync();

                    if (execute == DBNull.Value)
                    {
                        continue;
                    }

                    result = result + Convert.ToDouble(execute);
                }
            }

            if (result == 0)
            {
                return(default);
Esempio n. 11
0
    /// <summary>
    /// Executes the specified operation asynchronously.
    /// </summary>
    /// <param name="executionToken"></param>
    /// <param name="implementation"></param>
    /// <param name="cancellationToken"></param>
    /// <param name="state"></param>
    /// <returns></returns>
    protected override async Task <int?> ExecuteAsync(CommandExecutionToken <OleDbCommand, OleDbParameter> executionToken, CommandImplementationAsync <OleDbCommand> implementation, CancellationToken cancellationToken, object?state)
    {
        if (executionToken == null)
        {
            throw new ArgumentNullException(nameof(executionToken), $"{nameof(executionToken)} is null.");
        }
        if (implementation == null)
        {
            throw new ArgumentNullException(nameof(implementation), $"{nameof(implementation)} is null.");
        }
        var currentToken = executionToken as AccessCommandExecutionToken;

        if (currentToken == null)
        {
            throw new ArgumentNullException(nameof(executionToken), "only AccessCommandExecutionToken is supported.");
        }

        var startTime = DateTimeOffset.Now;

        try
        {
            using (var con = await CreateConnectionAsync(cancellationToken).ConfigureAwait(false))
            {
                int?rows = null;
                while (currentToken != null)
                {
                    OnExecutionStarted(currentToken, startTime, state);
                    using (var cmd = new OleDbCommand())
                    {
                        cmd.Connection = con;
                        currentToken.PopulateCommand(cmd, DefaultCommandTimeout);

                        if (currentToken.ExecutionMode == AccessCommandExecutionMode.Materializer)
                        {
                            rows = await implementation(cmd).ConfigureAwait(false);
                        }
                        else if (currentToken.ExecutionMode == AccessCommandExecutionMode.ExecuteScalarAndForward)
                        {
                            if (currentToken.ForwardResult == null)
                            {
                                throw new InvalidOperationException("currentToken.ExecutionMode is ExecuteScalarAndForward, but currentToken.ForwardResult is null.");
                            }

                            currentToken.ForwardResult(await cmd.ExecuteScalarAsync().ConfigureAwait(false));
                        }
                        else
                        {
                            rows = await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
                        }
                        executionToken.RaiseCommandExecuted(cmd, rows);
                        OnExecutionFinished(currentToken, startTime, DateTimeOffset.Now, rows, state);
                    }
                    currentToken = currentToken.NextCommand;
                }
                return(rows);
            }
        }
        catch (Exception ex)
        {
            if (cancellationToken.IsCancellationRequested)             //convert Exception into a OperationCanceledException
            {
                var ex2 = new OperationCanceledException("Operation was canceled.", ex, cancellationToken);
                OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex2, state);
                throw ex2;
            }
            else
            {
                OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex, state);
                throw;
            }
        }
    }
Esempio n. 12
0
    /// <summary>
    /// Execute stream as an asynchronous operation.
    /// </summary>
    /// <param name="executionToken">The execution token.</param>
    /// <param name="implementation">The implementation.</param>
    /// <param name="cancellationToken">The cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
    /// <param name="state">The state.</param>
    /// <returns>A Task&lt;StreamingCommandCompletionToken&gt; representing the asynchronous operation.</returns>
    /// <exception cref="System.ArgumentNullException">executionToken</exception>
    /// <exception cref="System.ArgumentNullException">implementation</exception>
    /// <exception cref="System.ArgumentNullException">executionToken - only AccessCommandExecutionToken is supported.</exception>
    /// <exception cref="System.InvalidOperationException">currentToken.ExecutionMode is ExecuteScalarAndForward, but currentToken.ForwardResult is null.</exception>
    public override async Task <StreamingCommandCompletionToken> ExecuteStreamAsync(CommandExecutionToken <OleDbCommand, OleDbParameter> executionToken, StreamingCommandImplementationAsync <OleDbCommand> implementation, CancellationToken cancellationToken, object?state)
    {
        if (executionToken == null)
        {
            throw new ArgumentNullException(nameof(executionToken), $"{nameof(executionToken)} is null.");
        }
        if (implementation == null)
        {
            throw new ArgumentNullException(nameof(implementation), $"{nameof(implementation)} is null.");
        }
        var currentToken = executionToken as AccessCommandExecutionToken;

        if (currentToken == null)
        {
            throw new ArgumentNullException(nameof(executionToken), "only AccessCommandExecutionToken is supported.");
        }

        var startTime = DateTimeOffset.Now;

        OleDbConnection?con = null;

        try
        {
            con = await CreateConnectionAsync(cancellationToken).ConfigureAwait(false);

            OleDbCommand?cmdToReturn = null;
            while (currentToken != null)
            {
                OnExecutionStarted(currentToken, startTime, state);
                using (var cmd = new OleDbCommand())
                {
                    cmd.Connection = con;
                    currentToken.PopulateCommand(cmd, DefaultCommandTimeout);

                    if (currentToken.ExecutionMode == AccessCommandExecutionMode.Materializer)
                    {
                        await implementation(cmd).ConfigureAwait(false);

                        cmdToReturn = cmd;
                    }
                    else if (currentToken.ExecutionMode == AccessCommandExecutionMode.ExecuteScalarAndForward)
                    {
                        if (currentToken.ForwardResult == null)
                        {
                            throw new InvalidOperationException("currentToken.ExecutionMode is ExecuteScalarAndForward, but currentToken.ForwardResult is null.");
                        }

                        currentToken.ForwardResult(await cmd.ExecuteScalarAsync().ConfigureAwait(false));
                    }
                    else
                    {
                        await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
                    }
                }
                currentToken = currentToken.NextCommand;
            }

            return(new StreamingCommandCompletionToken(this, executionToken, startTime, state, cmdToReturn, con));
        }
        catch (Exception ex)
        {
#if NET6_0_OR_GREATER
            if (con != null)
            {
                await con.DisposeAsync().ConfigureAwait(false);
            }
#else
            con?.Dispose();
#endif

            if (cancellationToken.IsCancellationRequested)             //convert Exception into a OperationCanceledException
            {
                var ex2 = new OperationCanceledException("Operation was canceled.", ex, cancellationToken);
                OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex2, state);
                throw ex2;
            }
            else
            {
                OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex, state);
                throw;
            }
        }
    }
Esempio n. 13
0
        /// <summary>
        /// Executes the specified operation asynchronously.
        /// </summary>
        /// <param name="executionToken"></param>
        /// <param name="implementation"></param>
        /// <param name="cancellationToken"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        protected override async Task <int?> ExecuteAsync(CommandExecutionToken <OleDbCommand, OleDbParameter> executionToken, CommandImplementationAsync <OleDbCommand> implementation, CancellationToken cancellationToken, object state)
        {
            if (executionToken == null)
            {
                throw new ArgumentNullException("executionToken", "executionToken is null.");
            }
            if (implementation == null)
            {
                throw new ArgumentNullException("implementation", "implementation is null.");
            }
            var currentToken = executionToken as AccessCommandExecutionToken;

            if (currentToken == null)
            {
                throw new ArgumentNullException("executionToken", "only AccessCommandExecutionToken is supported.");
            }

            var startTime = DateTimeOffset.Now;

            try
            {
                using (var con = await CreateConnectionAsync(cancellationToken).ConfigureAwait(false))
                {
                    int?rows = null;
                    while (currentToken != null)
                    {
                        OnExecutionStarted(currentToken, startTime, state);
                        using (var cmd = new OleDbCommand())
                        {
                            cmd.Connection = con;
                            if (DefaultCommandTimeout.HasValue)
                            {
                                cmd.CommandTimeout = (int)DefaultCommandTimeout.Value.TotalSeconds;
                            }
                            cmd.CommandText = currentToken.CommandText;
                            cmd.CommandType = currentToken.CommandType;
                            foreach (var param in currentToken.Parameters)
                            {
                                cmd.Parameters.Add(param);
                            }

                            currentToken.ApplyCommandOverrides(cmd);

                            if (currentToken.ExecutionMode == AccessCommandExecutionMode.Materializer)
                            {
                                rows = await implementation(cmd);
                            }
                            else if (currentToken.ExecutionMode == AccessCommandExecutionMode.ExecuteScalarAndForward)
                            {
                                currentToken.ForwardResult(await cmd.ExecuteScalarAsync());
                            }
                            else
                            {
                                rows = await cmd.ExecuteNonQueryAsync();
                            }
                            executionToken.RaiseCommandExecuted(cmd, rows);
                            OnExecutionFinished(currentToken, startTime, DateTimeOffset.Now, rows, state);
                        }
                        currentToken = currentToken.NextCommand;
                    }
                    return(rows);
                }
            }
            catch (Exception ex)
            {
                if (cancellationToken.IsCancellationRequested) //convert Exception into a OperationCanceledException
                {
                    var ex2 = new OperationCanceledException("Operation was canceled.", ex, cancellationToken);
                    OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex2, state);
                    throw ex2;
                }
                else
                {
                    OnExecutionError(executionToken, startTime, DateTimeOffset.Now, ex, state);
                    throw;
                }
            }
        }
Esempio n. 14
0
 /// <summary>
 /// Tests the connection asynchronously.
 /// </summary>
 /// <returns></returns>
 public override async Task TestConnectionAsync()
 {
     using (var con = await CreateConnectionAsync())
         using (var cmd = new OleDbCommand("SELECT 1", con))
             await cmd.ExecuteScalarAsync();
 }
Esempio n. 15
0
        /// <summary>
        /// Получение списка лицевых счетов с начислениями.
        /// </summary>
        public async Task <List <Employee> > GetEmployeesAsync(int year, Month month, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var result    = new List <Employee>();
            var dateSince = new DateTime(year, (int)month, 1);
            var dateTo    = dateSince.AddMonths(1).AddDays(-1);

            var accrual = GetAccrualAsync(year, month, token).Result;

            var sqlCount = $"SELECT COUNT(*) " +
                           $"FROM Zfcac AS Fcac " +
                           $"JOIN Zank AS Ank ON Fcac.Ank_rn = Ank.Ank_rn " +
                           $"JOIN Zsubdiv AS Subdiv ON Fcac.Subdiv_rn = Subdiv.Subdiv_rn " +
                           $"JOIN Zvidisp AS Vid ON Fcac.Vidisp_rn = Vid.Vidisp_rn " +
                           $"JOIN Ztipdol AS Dol ON Fcac.Tipdol_rn = Dol.Tipdol_rn " +
                           $"JOIN Orgbase AS Org ON Org.Rn = Ank.Orgbase_rn " +
                           $"JOIN Person AS P ON P.Orbase_rn = Org.Rn " +
                           $"WHERE Fcac.Startdate <= DATE({dateTo.Year}, {dateTo.Month}, {dateTo.Day}) AND Fcac.Enddate >= DATE({dateSince.Year}, {dateSince.Month}, {dateSince.Day})";

            var sql = $"SELECT P.Surname, P.Firstname, P.Secondname, Subdiv.Nameablative, Ank.Pf_id, Dol.Name, Vid.Name, Fcac.Fcac_rn, Fcac.Startdate, Fcac.Enddate, Subdiv.Note, Zf.Stqnt " +
                      $"FROM Zfcac AS Fcac " +
                      $"JOIN Zank AS Ank ON Fcac.Ank_rn = Ank.Ank_rn " +
                      $"JOIN Zsubdiv AS Subdiv ON Fcac.Subdiv_rn = Subdiv.Subdiv_rn " +
                      $"JOIN Zvidisp AS Vid ON Fcac.Vidisp_rn = Vid.Vidisp_rn " +
                      $"JOIN Ztipdol AS Dol ON Fcac.Tipdol_rn = Dol.Tipdol_rn " +
                      $"JOIN Orgbase AS Org ON Org.Rn = Ank.Orgbase_rn " +
                      $"JOIN Person AS P ON P.Orbase_rn = Org.Rn " +
                      $"LEFT JOIN Zfcacch AS Zf ON Zf.Fcacbs_rn = Fcac.Fcac_rn " +
                      $"WHERE Fcac.Startdate <= DATE({dateTo.Year}, {dateTo.Month}, {dateTo.Day}) AND Fcac.Enddate >= DATE({dateSince.Year}, {dateSince.Month}, {dateSince.Day})";

            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = sqlCount, Connection = dbConnectionAsync
            })
            {
                AddCount = 0;
                int allRecords = Convert.ToInt32(await cmd.ExecuteScalarAsync());
                LoadData?.Invoke(this, new Tuple <string, int, bool>("Лицевые счета:", allRecords, true));
            }

            using (OleDbCommand cmd = new OleDbCommand()
            {
                CommandText = sql, Connection = dbConnectionAsync
            })
            {
                using (var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false))
                {
                    while (await reader.ReadAsync(token).ConfigureAwait(false))
                    {
                        var rn = reader[7].ToString().Trim();

                        if (accrual.Any(a => string.Compare(a.EmployeeId, rn, StringComparison.Ordinal) == 0))
                        {
                            var name           = reader[0].ToString().Trim();
                            var surname        = reader[1].ToString().Trim();
                            var patronymic     = reader[2].ToString().Trim();
                            var subdivision    = reader[3].ToString().Trim();
                            var snails         = reader[4].ToString().Trim();
                            var position       = reader[5].ToString().Trim();
                            var subdivisionOid = reader[10].ToString().Trim();
                            var rate           = reader[11].ToString().Trim();

                            var typePersonalAccount = reader[6].ToString().Trim();
                            typePersonalAccount = $"{char.ToUpper(typePersonalAccount[0])}{typePersonalAccount.Substring(1).ToLower()}";

                            //var sourceOfFinancing = reader[7].ToString().Trim();

                            var employee = new Employee()
                            {
                                rn                  = rn,
                                Name                = name,
                                Surname             = surname,
                                Patronymic          = patronymic,
                                Subdivision         = subdivision,
                                Snails              = snails,
                                Position            = position,
                                TypePersonalAccount = typePersonalAccount,
                                SubdivisionOid      = subdivisionOid,
                                Rate                = rate,
                                WorkingTime         = GetWorkingTime(rn, year, month, token).Result,
                                ActualHoursWorked   = GetActualHoursWorked(rn, year, month, token).Result
                            };

                            employee.Accruals = new List <Accrual>();
                            employee.Accruals.AddRange(accrual.Where(w => string.Compare(w.EmployeeId, rn, StringComparison.Ordinal) == 0));
                            result.Add(employee);

                            AddCount++;
                            ReaderEvent?.Invoke(this, AddCount);
                        }
                    }
                }
            }

            LoadData?.Invoke(this, new Tuple <string, int, bool>(string.Empty, 0, false));

            return(result);
        }