public async Task <Result <SaveSalaryConfigResponse> > Handle(SaveSalaryConfigRequest request, CancellationToken cancellationToken) { var currency = new Currency(request.SalarySetting.Currency); var result = await _salaryConfigRepository.SaveAsync(new SalaryConfig ( id : request.SalarySetting.Id, commonMinimumWage : new Money(request.SalarySetting.CommonMinimumWage, currency), regionalMinimumWage : new Money(request.SalarySetting.RegionalMinimumWage, currency), coefficientSocialCare : request.SalarySetting.CoefficientSocialCare, employerSocialInsuranceRate : request.SalarySetting.EmployerSocialInsuranceRate, employeeSocialInsuranceRate : request.SalarySetting.EmployeeSocialInsuranceRate, healthCareInsuranceEmployerRate : request.SalarySetting.EmployerHealthCareInsuranceRate, healthCareInsuranceEmployeeRate : request.SalarySetting.EmployeeHealthCareInsuranceRate, unemploymentInsuranceEmployerRate : request.SalarySetting.EmployerUnemploymentInsuranceRate, unemploymentInsuranceEmployeeRate : request.SalarySetting.EmployeeUnemploymentInsuranceRate, foreignEmployerSocialInsuranceRate : request.SalarySetting.ForeignEmployerSocialInsuranceRate, foreignEmployeeSocialInsuranceRate : request.SalarySetting.ForeignEmployeeSocialInsuranceRate, foreignHealthCareInsuranceEmployeeRate : request.SalarySetting.ForeignEmployeeHealthCareInsuranceRate, foreignHealthCareInsuranceEmployerRate : request.SalarySetting.ForeignEmployerHealthCareInsuranceRate, foreignUnemploymentInsuranceEmployeeRate : request.SalarySetting.ForeignEmployeeUnemploymentInsuranceRate, foreignUnemploymentInsuranceEmployerRate : request.SalarySetting.ForeignEmployerUnemploymentInsuranceRate, minimumNonWorkingDay : request.SalarySetting.MinimumNonWorkingDay, employeeUnionFeeRate : request.SalarySetting.EmployeeUnionFeeRate, employerUnionFeeRate : request.SalarySetting.EmployerUnionFeeRate, maximumUnionFeeRate : request.SalarySetting.MaximumUnionFeeRate, personalDeduction : new Money(request.SalarySetting.PersonalDeduction, currency), dependantDeduction : new Money(request.SalarySetting.DependantDeduction, currency), defaultProbationTaxRate : request.SalarySetting.DefaultProbationTaxRate, isInsurancePaidFullSalary : request.SalarySetting.IsInsurancePaidFullSalary, insurancePaidAmount : new Money(request.SalarySetting.InsurancePaidAmount, currency), progressiveTaxRateLookUpTable : new ProgressiveTaxRateLookUpTable( request.ProgressiveTaxRates.Select( x => new ProgressiveTaxRate ( lowerBound : new Money(x.LowerBound, currency), upperBound : new Money(x.UpperBound, currency), rate : x.Rate, progressiveTaxRateLevel : x.TaxRateLevel )).ToArray() ) ) ); var markResult = await _empMonthlySalaryRepo.MarkNotLatestAsync(request.YearMonth); return(result.Map(() => markResult).Map(x => new SaveSalaryConfigResponse())); }
public async Task Consume(ConsumeContext <EmployeeProfileChangedEvent> context) { try { _logger.LogInformation("Start EmployeeProfileChangedConsumer"); var profileChangedEvent = context?.Message; if (profileChangedEvent == null) { _logger.LogInformation("profileChangedEvent is null"); _logger.LogInformation("End EmployeeProfileChangedConsumer"); return; } var sendDate = profileChangedEvent.SendDate.ToDateTime(); var profile = await _profileRepo.SaveAsync(new EmployeeProfile( email : profileChangedEvent.Email, fullname : profileChangedEvent.Fullname, employeeType : profileChangedEvent.EmployeeType, position : profileChangedEvent.Position, dependantEndDates : profileChangedEvent.DependantEndDates.ToDateTimeArray(), inUnion : profileChangedEvent.InUnion, terminatedDate : profileChangedEvent.TerminationDate.ToDateTimeOrNull(), isForeigner : profileChangedEvent.IsForeigner), sendDate); var yearMonth = sendDate.ToString("yyyy-MM"); var result = await profile.MapAsync(x => _salaryRepo.MarkNotLatestAsync(yearMonth)); if (result.Failure) { _logger.LogError(result.Error.Message); } _logger.LogInformation("End EmployeeProfileChangedConsumer"); } catch (Exception ex) { _logger.LogError(ex.Message); _logger.LogInformation("End EmployeeProfileChangedConsumer"); } }
public async Task Consume(ConsumeContext <EmployeeProfileDeletedEvent> context) { _logger.LogInformation("Start EmployeeProfileDeletedConsumer"); var profileDeletedEvent = context.Message; var start = new DateTime(1970, 1, 1, 0, 0, 0, 0); var deletedProfile = await _profileRepo.DeleteAsync(profileDeletedEvent.Email, start.AddMilliseconds(profileDeletedEvent.SendDate)); if (deletedProfile.Failure) { _logger.LogError(deletedProfile.Error.Message); } var yearMonth = start.AddMilliseconds(profileDeletedEvent.SendDate).ToString("yyyy-MM"); var mark = await _salaryRepo.MarkNotLatestAsync(yearMonth); if (mark.Failure) { _logger.LogError(mark.Error.Message); } _logger.LogInformation("End EmployeeProfileDeletedConsumer"); }
public async Task <Result <SaveEmpMonthlyEnteredRecordResponse> > Handle( SaveEmpMonthlyEnteredRecordRequest request, CancellationToken cancellationToken) { var record = request.Records.Count == 0 ? await _empMonthlyEnteredRecordRepo.DeleteAsync(request.Key, request.YearMonth) : await _empMonthlyEnteredRecordRepo.SaveAsync(records : request.Records.Select(x => { var currency = new Currency(x.Currency); return(new EmployeeMonthlyEnteredRecord( fullname: x.Fullname, email: x.Email, grossContractSalary: new GrossContractedSalary(new Money(x.GrossContractSalary, currency)), probationGrossContractSalary: new GrossContractedSalary(new Money(x.ProbationGrossContractSalary, currency)), actualWorkingDays: x.ActualWorkingDays, probationWorkingDays: x.ProbationWorkingDays, taxableAnnualLeave: new TaxableAllowance(name: Constants.TAXABLE_ANNUAL_LEAVE, amount: new Money(x.TaxableAnnualLeave, currency)), taxable13MonthSalary: new TaxableAllowance(name: Constants.TAXABLE_13MONTH_SALARY, amount: new Money(x.Taxable13MonthSalary, currency)), taxableOthers: new TaxableAllowance(name: Constants.TAXABLE_OTHERS, amount: new Money(x.TaxableOthers, currency)), nonTaxableAllowances: new NonTaxableAllowance[] { new NonTaxableAllowance( amount: new Money(x.NonTaxableAllowance, currency), name: Constants.NON_TAXABLE_ALLOWANCE) }, paymentAdvance: new PaymentAdvance(new Money(x.PaymentAdvance, currency)), adjustmentAdditions: new AdjustmentAddition[] { new AdjustmentAddition( amount: new Money(x.AdjustmentAddition, currency)) }, adjustmentDeductions: new AdjustmentDeduction[] { new AdjustmentDeduction( amount: new Money(x.AdjustmentDeduction, currency)) } )); }).ToList(), yearMonth : request.YearMonth, key : request.Key, request.StandardWorkingDays); var markResult = await _empMonthlySalaryRepo.MarkNotLatestAsync(request.YearMonth); return(record.Map(() => markResult).Map(x => new SaveEmpMonthlyEnteredRecordResponse())); }