public async Task <IActionResult> Post([FromBody] ProjectBasicDto dto)
        {
            using (Logger.BeginScope("Insert Project"))
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(new { message = "Not a valid model" + ModelState.ToString() }));
                }
                try
                {
                    _UnitOfWork.Transaction = _UnitOfWork.Begin();

                    var id = await _UnitOfWork.ProjectRepository.InsertProjectAsync(dto);

                    _UnitOfWork.Commit();

                    return(Ok(id));
                }
                catch (Exception ex)
                {
                    _UnitOfWork.Dispose();
                    return(BadRequest(new { message = ex.Message }));
                }
            }
        }
 private ProjectBasicDto checkCurrency(ProjectBasicDto dto)
 {
     if (dto.EstimateCost == null)
     {
         dto.EstimateCostCurrencyId = null;
     }
     return(dto);
 }
        public async Task <int> InsertProjectAsync(ProjectBasicDto dto)
        {
            dto = checkCurrency(dto);
            var sql = " DECLARE @ID int;" +
                      " INSERT INTO [dbo].[Project] " +
                      " ([CustId] " +
                      " ,[ProjectName] " +
                      " ,[ProjectDecription] " +
                      " ,[StartDate] " +
                      " ,[EndDate] " +
                      " ,[EstimateCost] " +
                      " ,[EstimateCostCurrencyId] " +
                      " ,[EstimateManDay] " +
                      " ,[DeliveryDate] " +
                      " ,[PaymentDate] " +
                      " ,[ProjectStatusId] " +
                      " ,[CreatedId] " +
                      " ,[CreatedDate]) " +
                      " VALUES " +
                      " (@CustId " +
                      " ,@ProjectName" +
                      " ,@ProjectDecription " +
                      " ,@StartDate " +
                      " ,@EndDate " +
                      " ,@EstimateCost " +
                      " ,@EstimateCostCurrencyId " +
                      " ,@EstimateManDay " +
                      " ,@DeliveryDate " +
                      " ,@PaymentDate " +
                      " ,@ProjectStatusId " +
                      " ,@CreatedId " +
                      " ,GETDATE() )" +
                      " SET @ID = SCOPE_IDENTITY(); " +
                      " SELECT @ID";

            var id = await Connection.QuerySingleAsync <int>(sql, new
            {
                CustId                 = dto.CustId,
                ProjectName            = dto.ProjectName,
                ProjectDecription      = dto.ProjectDecription,
                StartDate              = dto.StartDate,
                EndDate                = dto.EndDate,
                EstimateCost           = dto.EstimateCost,
                EstimateCostCurrencyId = dto.EstimateCostCurrencyId,
                EstimateManDay         = dto.EstimateManDay,
                DeliveryDate           = dto.DeliveryDate,
                PaymentDate            = dto.PaymentDate,
                ProjectStatusId        = dto.ProjectStatusId,
                CreatedId              = dto.CreatedId,
            }, Transaction);

            return(id);
        }
        public async Task <int> UpdateProjectAsync(ProjectBasicDto dto)
        {
            dto = checkCurrency(dto);
            var sql = " UPDATE [dbo].[Project] " +
                      " SET [CustId] = @CustId " +
                      "  ,[ProjectName] = @ProjectName " +
                      "  ,[ProjectDecription] = @ProjectDecription " +
                      "  ,[StartDate] = @StartDate " +
                      "  ,[EndDate] = @EndDate " +
                      "  ,[EstimateCost] = @EstimateCost " +
                      "  ,[EstimateCostCurrencyId] = @EstimateCostCurrencyId " +
                      "  ,[EstimateManDay] = @EstimateManDay " +
                      "  ,[DeliveryDate] = @DeliveryDate " +
                      "  ,[PaymentDate] = @PaymentDate " +
                      "  ,[ProjectStatusId] = @ProjectStatusId " +
                      "  ,[UpdatedId] = @UpdatedId" +
                      "  ,[UpdatedDate] = GetDate() " +
                      " WHERE  Id = @Id";

            var x = await Connection.ExecuteAsync(sql, new
            {
                Id                     = dto.Id,
                CustId                 = dto.CustId,
                ProjectName            = dto.ProjectName,
                ProjectDecription      = dto.ProjectDecription,
                StartDate              = dto.StartDate,
                EndDate                = dto.EndDate,
                EstimateCost           = dto.EstimateCost,
                EstimateCostCurrencyId = dto.EstimateCostCurrencyId,
                EstimateManDay         = dto.EstimateManDay,
                DeliveryDate           = dto.DeliveryDate,
                PaymentDate            = dto.PaymentDate,
                ProjectStatusId        = dto.ProjectStatusId,
                UpdatedId              = dto.UpdatedId,
            }, Transaction);

            return(x);
        }
        public async Task <IActionResult> Put([FromBody] ProjectBasicDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new { message = "Not a valid model" + ModelState.ToString() }));
            }
            try
            {
                _UnitOfWork.Transaction = _UnitOfWork.Begin();
                var x = await _UnitOfWork.ProjectRepository.UpdateProjectAsync(dto);

                _UnitOfWork.Commit();
                return(Ok(x));
            }
            catch (Exception ex)
            {
                _UnitOfWork.Dispose();
                return(BadRequest(new { message = ex.Message }));
            }
            finally
            {
                _UnitOfWork.Dispose();
            }
        }