Compare commits

..

197 Commits

Author SHA1 Message Date
5fa49a4988 change main pages 2025-06-01 18:23:51 +03:30
MahanCh
99e807fa23 fix step4 bug 2025-05-20 17:45:43 +03:30
MahanCh
2ce17dcac9 change some styles 2025-05-19 18:04:47 +03:30
MahanCh
233c1a3aa9 merge from master 2025-05-19 18:04:36 +03:30
MahanCh
43c56aa4a1 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-19 17:34:45 +03:30
MahanCh
349c374ca3 fix rollcall recalculate bug 2025-05-19 17:34:37 +03:30
SamSys
c81cafa228 New Permission WorkFlow Admin 2025-05-19 01:23:42 +03:30
SamSys
c0e438aa6d insurane nane caspian 1403 esfand 2025-05-18 18:57:41 +03:30
MahanCh
37cd07c2b8 fix conflict 2025-05-18 17:54:55 +03:30
MahanCh
6201492879 change step4 2025-05-18 17:52:33 +03:30
SamSys
fc43e97cc4 insurance Exeption 2025-05-18 12:10:07 +03:30
SamSys
eeea868c05 Arbaic fixed ToPersian metod 2025-05-17 22:58:32 +03:30
SamSys
140adb2588 Version Added to AutoExtention 2025-05-17 00:31:28 +03:30
SamSys
afb07aa90f AutoExtention-startworkcheck merged 2025-05-17 00:24:03 +03:30
SamSys
ee2adf1c13 DateChange LeftWorkCheck Completed 2025-05-15 17:30:51 +03:30
SamSys
986092135f change temp 2025-05-15 15:02:36 +03:30
SamSys
489528d076 new version of Register 2025-05-14 21:24:06 +03:30
SamSys
ab2c1124ca checkout change shift work 2025-05-14 20:42:27 +03:30
SamSys
bc36d8e151 change 2025-05-14 19:57:01 +03:30
SamSys
f7f44b98fb add new ajax metod 2025-05-14 19:31:56 +03:30
SamSys
8aa8ffe8c8 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-14 18:49:55 +03:30
SamSys
5a8bccb98f checkout complex chang - rotatingShiftReport change - add new Description to contract print 2025-05-14 18:49:44 +03:30
MahanCh
3c73a277ce fix case history bug 2025-05-14 18:36:46 +03:30
SamSys
75da32167e Sepration js merged 2025-05-13 21:31:07 +03:30
SamSys
d99e69fa5b Revert "seperate left work and leftwork insurance"
This reverts commit da738054df.
2025-05-13 21:28:05 +03:30
SamSys
d90e01d733 Sepration js Admin\ContractinParty 2025-05-13 19:27:47 +03:30
MahanCh
5f71cf829b Merge branch 'sepration-js' of https://github.com/syntax24/OriginalGozareshgir into sepration-js 2025-05-13 18:52:57 +03:30
MahanCh
da738054df seperate left work and leftwork insurance 2025-05-13 18:52:26 +03:30
SamSys
521aa9b6ee Sepration js Admin\Contracts All 2025-05-13 18:34:50 +03:30
SamSys
bb2802002a delete some No Useable file in Admin\Contracts 2025-05-13 17:59:27 +03:30
SamSys
2049d8b2eb Sepration Contracts Index js 2025-05-13 17:48:18 +03:30
SamSys
2c6a39bf67 delete craete 5 2025-05-13 17:09:31 +03:30
SamSys
88a0552a07 Sepration js client/Contract/index 2025-05-13 15:39:49 +03:30
SamSys
429b9aad27 changes 2025-05-12 21:20:22 +03:30
SamSys
60052f6cd2 ConvertStatic ckeckout and BreakTime merged to master 2025-05-12 21:16:51 +03:30
SamSys
c7ac3ac7cb BreakTime Merged 2025-05-12 21:14:26 +03:30
SamSys
48f7a7f975 merge from master 2025-05-12 19:42:19 +03:30
SamSys
e0793bc300 convert completed 2025-05-12 19:36:58 +03:30
SamSys
601511ef77 DailyBug Fixed merged 2025-05-12 15:43:51 +03:30
SamSys
020b46f911 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-12 15:41:43 +03:30
SamSys
ac1bb05515 Insuranc IsManager condition set for new props 2025-05-12 15:41:35 +03:30
MahanCh
2a8d2d5581 remove toturial 2025-05-12 15:28:34 +03:30
MahanCh
71c55cd779 fix new employee bug 2025-05-12 15:20:52 +03:30
MahanCh
3c8f212825 CHANGE FIND ROTATING SHIFT FOR TIME DIFFERENCES 2025-05-12 15:12:20 +03:30
SamSys
73feb3dd78 convert static complex shift 2025-05-11 21:13:07 +03:30
SamSys
8d175920d5 Fixed some bugs [rotatingshift cal - subAccountPass] 2025-05-11 19:52:10 +03:30
SamSys
6857ba6bc1 convet 12-24 2025-05-11 19:47:37 +03:30
MahanCh
a9c2f09f9e FIX SubAccountChangePassword 2025-05-11 18:13:39 +03:30
MahanCh
22b722e3dc show the TimeDifferences in Customize Checkout to three number 2025-05-11 17:20:12 +03:30
MahanCh
c168843afc add new find rotating shifts 2025-05-11 17:02:48 +03:30
SamSys
1b7af456b0 change 2025-05-11 16:46:05 +03:30
SamSys
51291d6de7 Merge Edit CustomizeChekout after change salaryAid or .... 2025-05-10 20:49:49 +03:30
SamSys
97ac0e440c Insurance Completed merge 2025-05-10 20:37:38 +03:30
SamSys
586f0a29c2 Insurance New Change Completed 2025-05-10 20:29:08 +03:30
MahanCh
a620872de1 remove leftWork for rejected employeedocument rejected 2025-05-10 19:53:20 +03:30
MahanCh
cebb525968 fix bugs and add tomam for salaryAid calculation date 2025-05-10 19:50:01 +03:30
SamSys
666964609d PrintListWorkshop added sort by ArchiveCode 2025-05-10 17:16:57 +03:30
SamSys
5ef277d604 Insurance changes 2025-05-10 16:59:59 +03:30
MahanCh
802f9a39c5 fix small front bugs for salaryAid and edit checkout 2025-05-10 16:40:42 +03:30
SamSys
8cc26936cd DateSalary - GetDateSalaryViewModel metod bug fixed 2025-05-10 16:33:15 +03:30
SamSys
b0293bf25c DateSalary bug fix [کمک دولت پورعلی ابر 1403] 2025-05-10 16:30:55 +03:30
SamSys
5b97f79fbd JsBugs merged 2025-05-10 15:28:17 +03:30
MahanCh
a9c5c8f8ca fix js bugs 2025-05-10 14:08:18 +03:30
SamSys
9e60c12212 Insurance New Change 2025-05-10 13:06:16 +03:30
SamSys
ff339b9eee ConvertStatic ADD 12-24 2025-05-10 11:55:23 +03:30
SamSys
86c7113987 commented 2025-05-08 17:12:52 +03:30
SamSys
552ee74d56 Merge FindRotatingShift 2025-05-08 16:26:39 +03:30
MahanCh
d1e5adf96f add salaryAid calculation Date and
edit checkout on cahnge salary & ...
2025-05-08 14:08:28 +03:30
MahanCh
fbf367677c Change rollcall rotating shift TimeDifferences 2025-05-08 12:16:26 +03:30
SamSys
612dd99bfe ConvertStaticChekout - shift4 completed 2025-05-07 22:50:42 +03:30
MahanCh
3a6f87eaca fix some register financial bugs 2025-05-07 22:45:42 +03:30
MahanCh
8e8e9ef5de Revert "changes"
This reverts commit 1e18fe1067.
2025-05-07 22:39:25 +03:30
MahanCh
1e18fe1067 changes 2025-05-07 22:39:09 +03:30
SamSys
d1aef862cf merge ModalCamera change Clinet 2025-05-06 21:52:29 +03:30
SamSys
fb2f7ba7c1 ConvertStaticHourse to RollCall - FindStaticShiftsStatus Metod 2025-05-06 21:38:40 +03:30
SamSys
fc18985334 change kabise 365 counter 2025-05-06 20:16:32 +03:30
SamSys
92d36f2966 Front changes 2025-05-06 19:19:52 +03:30
SamSys
0c6a8821ac Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-06 19:18:24 +03:30
SamSys
4b9d39f1e7 InsuranceJob Bug fix 2025-05-06 19:18:18 +03:30
SamSys
5daa36cfb5 start Convert Static compute to rollCall Compute 2025-05-06 19:16:40 +03:30
MahanCh
9e5e7b57c7 fix permissions for employee document workflow 2025-05-06 18:47:22 +03:30
MahanCh
a6984e5f1b fix little bugs 2025-05-06 18:33:15 +03:30
MahanCh
fe8eb5d92b fix cleave js bug 2025-05-06 18:18:20 +03:30
MahanCh
24e661252c add sms report loading 2025-05-06 17:20:20 +03:30
SamSys
e7d5716317 EmployeeDocument Refactor 2025-05-06 15:26:52 +03:30
SamSys
a6be044dbb temporary change sms onget 2025-05-06 15:25:40 +03:30
MahanCh
c91f7e7a90 fix employee Document Style Bug 2025-05-06 15:21:04 +03:30
MahanCh
42de15b3db add try catch for sms 2025-05-06 14:40:10 +03:30
MahanCh
ffcfb4ea3f Merge branch 'Feature/EmployeeDocuments/V2' of https://github.com/syntax24/OriginalGozareshgir into Feature/EmployeeDocuments/V2 2025-05-06 14:16:59 +03:30
MahanCh
a49e2dbb75 complete employeeDocument Query(Tomam) 2025-05-06 14:16:55 +03:30
MahanCh
d8cd33732a fix deleting task schedule 2025-05-05 22:24:07 +03:30
SamSys
5aa714e81d set roleid Permission for employeedocument workflow admin 2025-05-05 22:05:30 +03:30
SamSys
62502fcede add HasCheckout Validation in InsuranceList 2025-05-05 20:30:36 +03:30
MahanCh
6eec454685 employeeDocument Refactor 2025-05-05 18:09:53 +03:30
SamSys
4022a1afd8 Add new Checkbox for Insurance in CreateWorshopp And EditWorkshop 2025-05-05 16:43:35 +03:30
SamSys
86cd776c4d merge from master 2025-05-05 15:18:28 +03:30
MahanCh
13cad28356 add WorkshopSettingsPage in client 2025-05-05 14:03:33 +03:30
SamSys
9cdb922aa1 Employee Validation For MarritalStatus CaseHistory 2025-05-04 21:27:46 +03:30
SamSys
6699909b2f overTimePay static changes 2025-05-04 21:26:01 +03:30
MahanCh
ec277629fb fix register financial problems 2025-05-04 20:58:45 +03:30
MahanCh
718a7d42b7 fix case history bug 2025-05-04 20:03:04 +03:30
MahanCh
9637b6a581 add employee Validation 2025-05-04 20:00:32 +03:30
SamSys
ec29d3b869 add permission to ScheduleTadk Button 2025-05-04 18:30:42 +03:30
SamSys
4648113a28 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-04 17:30:06 +03:30
SamSys
f4f6fd1bf6 remove Insurance job salarey validation 2025-05-04 17:29:58 +03:30
MahanCh
d9b7245cee Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-03 20:52:48 +03:30
MahanCh
85bec9d7fb add validation for cws in edit rotating shifts 2025-05-03 20:52:45 +03:30
SamSys
f93d0b7e89 CustomizeCheckoutMandatoryComputeForKebabMahdi bug fixed 2025-05-03 20:13:19 +03:30
SamSys
f8f7e7d3cf report change 2025-05-03 20:12:05 +03:30
MahanCh
e159738b3d Add group exception for create customzie Checkout 2025-05-03 18:38:06 +03:30
SamSys
ebde36ad8d uid Autorize for create Employee admin Side 2025-05-03 17:48:47 +03:30
SamSys
6f160a85ab rollcallService foreignKey bug fixed 2025-05-03 17:45:54 +03:30
SamSys
ebaef13c4d merge ReCalculate Values 2025-05-03 17:45:09 +03:30
MahanCh
a29e148753 fix edit employee bug in admin 2025-05-03 14:45:13 +03:30
MahanCh
625200bed1 add uid authorize in crearte client 2025-05-01 15:01:36 +03:30
SamSys
4e81b6a2ef WorkFlow EmployeeDocument Fixed Bugs 2025-04-30 20:38:25 +03:30
SamSys
e03aabf88b RotatingShiftReport changes 2025-04-30 20:15:11 +03:30
MahanCh
d1158b95cb fix Employee doc workflow 2025-04-30 19:51:19 +03:30
MahanCh
dbc73509b5 Finish recalculation on change CWES 2025-04-30 17:14:02 +03:30
MahanCh
b6ac3073d3 fix speed workflow employeeDocuments 2025-04-30 16:48:52 +03:30
MahanCh
9592960a40 add recalculate values 2025-04-30 14:55:38 +03:30
SamSys
01f06530c7 add insurance new prop to workshop 2025-04-29 21:33:29 +03:30
SamSys
4ec4935a1d RotatingShiftReport and RotatingShiftCompute Bug Fixed 2025-04-29 20:42:10 +03:30
SamSys
e423df6fbb Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-29 18:39:02 +03:30
SamSys
7bc7cd3422 WebConfig Added - Financia;Statmet create bug Fixed 2025-04-29 18:38:55 +03:30
MahanCh
dec934214d Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-29 18:23:27 +03:30
MahanCh
dd922a72d5 add kestrel limit bodySize 2025-04-29 18:23:19 +03:30
SamSys
76f32c5c38 RotatingShiftRepor completed 2025-04-28 20:58:58 +03:30
SamSys
8f015aa124 DesktopView and MobileView 2025-04-28 20:58:08 +03:30
SamSys
1a8886be50 InsuranceJob Duplication Validation to EconomicCode removed 2025-04-28 19:51:52 +03:30
SamSys
cf6f677816 ExcelGrouping Merge 2025-04-28 19:49:59 +03:30
SamSys
366d42dec9 styling RotatingShiftReport modal 2025-04-28 19:48:54 +03:30
MahanCh
5bce350701 add excel for rollcall grouping 2025-04-28 19:47:12 +03:30
SamSys
d322f2b8db Merge remote-tracking branch 'origin/Fix/RollCall/GroupingValidationLeftWorkBug' 2025-04-28 19:21:21 +03:30
SamSys
cd83ca4379 RotatingShiftReport Modal 2025-04-28 19:20:10 +03:30
MahanCh
edc017b4d4 Left work bug fixed 2025-04-28 19:12:58 +03:30
SamSys
4a0153e1e8 customizeCheckout create bug 2025-04-28 18:50:04 +03:30
SamSys
7f9a2ac597 add partial 2025-04-28 18:48:19 +03:30
SamSys
f9298e1320 toumam changes 2025-04-28 17:00:34 +03:30
SamSys
ce088fc432 save changes tomam 2025-04-28 16:59:35 +03:30
MahanCh
3e02cd711f fix shiftDateBug 2025-04-28 16:23:09 +03:30
MahanCh
faeb297f5c fix register problems 2025-04-28 15:49:56 +03:30
MahanCh
64dffd6d25 change condition in customize checkout eligible employees 2025-04-28 13:57:24 +03:30
SamSys
ffdc71401e hasRollCall change 2025-04-27 22:11:39 +03:30
SamSys
21f8a399b4 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-27 21:24:09 +03:30
SamSys
cad2c152e5 .eye z-index 2025-04-27 21:23:56 +03:30
SamSys
247e2f2069 RotatingShitReport - RollCall 2025-04-27 21:22:11 +03:30
MahanCh
cb845afdf6 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-27 20:55:10 +03:30
MahanCh
530a263fd8 fix task size validation 2025-04-27 20:54:38 +03:30
SamSys
aba8960b1d Validation for Check Workflow aboat LeftworkTemp 2025-04-27 15:36:08 +03:30
MahanCh
e2ba7d9450 add validation to onget 2025-04-27 14:20:16 +03:30
SamSys
a316b2a5f1 Duplicate LeftWorkTemp Bug Fixed 2025-04-26 22:36:31 +03:30
SamSys
4b045440c4 sepration js : EditTransaction - Extention - DinancialStatment - Index 2025-04-26 22:33:17 +03:30
10c35f6f10 add validation and change the list of employees 2025-04-26 20:44:24 +03:30
SamSys
af30c7f088 Edit Sepration js 2025-04-26 17:57:45 +03:30
SamSys
d95ca28cd4 seprate Create js 2025-04-26 17:13:08 +03:30
SamSys
89a8e1c027 merge EditFile-SessionList 2025-04-26 16:27:46 +03:30
SamSys
e584605c4e merge Accept-CutByBgService 2025-04-26 16:26:35 +03:30
MahanCh
734699b319 fix accept cutbyservice 2025-04-26 11:08:31 +03:30
MahanCh
e8407868a7 fix session bug and edit file bug 2025-04-26 11:01:08 +03:30
7ad1a2f376 add tomam 2 2025-04-24 15:07:30 +03:30
e190408504 Revert "GetEmployeeShiftDateByRollCallStartDate bug fixed"
This reverts commit b880721dfa.
2025-04-24 14:49:30 +03:30
e520c8c14b Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-24 14:49:09 +03:30
bd0e79fadf . 2025-04-24 14:48:11 +03:30
SamSys
b880721dfa GetEmployeeShiftDateByRollCallStartDate bug fixed 2025-04-24 14:25:30 +03:30
MahanCh
c3457881b0 add register part 2025-04-23 23:22:26 +03:30
SamSys
e0a68690c1 InsuranvePermission - Checkout change 2025-04-23 21:33:29 +03:30
SamSys
817a848eef Merge remote-tracking branch 'origin/Feature/Leave/CreateLeaveStyleChanges' 2025-04-22 22:45:26 +03:30
SamSys
f77fa7a324 sms mearg 2025-04-22 22:44:42 +03:30
MahanCh
e44dad08ef fix sms style 2025-04-22 20:38:24 +03:30
MahanCh
f901f8a682 change the create leave modal 2025-04-22 19:57:45 +03:30
SamSys
08913d38f2 mahan 2025-04-22 19:29:33 +03:30
SamSys
15156c06fc sms report and task styles merged 2025-04-22 19:26:57 +03:30
MahanCh
5da9d23875 add sms and task fix 2025-04-22 19:26:08 +03:30
SamSys
c14da7ad5b Merge remote-tracking branch 'origin/Feature/InstitutionPlan/init' 2025-04-22 19:23:35 +03:30
SamSys
1629b121d3 Merge remote-tracking branch 'origin/Fix/CWS/breakTime-validation-rotating-shifts' 2025-04-22 19:22:26 +03:30
SamSys
3a60ddf449 Merge remote-tracking branch 'origin/Feature/RollCall/mannual-edit' 2025-04-22 19:21:46 +03:30
SamSys
c90fe4cb29 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-22 19:14:32 +03:30
SamSys
57930aae4f rotatingShift Compute on Rollcall Bug Fixed 2025-04-22 19:14:26 +03:30
MahanCh
d816e73fed delete useless workshopId 2025-04-22 19:13:15 +03:30
MahanCh
10bfbad3cb add institution plan front 2025-04-22 18:31:00 +03:30
MahanCh
671f6be87a change current day mannual edit validaton 2025-04-22 18:13:09 +03:30
MahanCh
2901a9ecf4 fix rotating shift validation 2025-04-22 17:39:53 +03:30
MahanCh
aff835fd7f add split query to customize checkout print 2025-04-22 13:38:26 +03:30
MahanCh
7055839538 fix excel bugs 2025-04-22 13:35:15 +03:30
SamSys
2166e7c5ee Leave Compute On Checkout Add ShiftDuration 2025-04-21 23:38:44 +03:30
SamSys
d4dc65b4e8 Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-04-21 23:37:49 +03:30
38dd1b1818 fix customize checkout bug 2025-04-21 22:55:27 +03:30
SamSys
8c5b21b726 Merge remote-tracking branch 'origin/Fix/CustomizeCheckout/Change31DaysTo30' 2025-04-21 15:44:20 +03:30
SamSys
77d9c42823 change 2025-04-21 15:43:49 +03:30
SamSys
214882108c HasRollCallRecord Condition 2025-04-21 15:43:25 +03:30
SamSys
ececd99d07 merge for kabab mahdi 2025-04-21 13:51:56 +03:30
SamSys
d54e3c4a67 merge for excel Multy sheets 2025-04-20 20:51:10 +03:30
SamSys
4e8a7d74a2 merge for smsReport 2025-04-20 20:50:20 +03:30
SamSys
d1414b0b90 change 2025-04-20 20:48:55 +03:30
MahanCh
aeb65dc152 add sms report for admin 2025-04-20 20:43:45 +03:30
MahanCh
e69525b1ad add excel export in multi sheet 2025-04-20 20:28:08 +03:30
484 changed files with 123287 additions and 43155 deletions

View File

@@ -245,21 +245,24 @@ public class AuthHelper : IAuthHelper
#region Pooya
public (long Id, UserType userType) GetUserTypeWithId()
public (long Id, UserType userType, long roleId) GetUserTypeWithId()
{
if (!IsAuthenticated())
return (0, UserType.Anonymous);
return (0, UserType.Anonymous, 0);
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
var subAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId")?.Value ?? "0");
if (subAccountId > 0)
return (subAccountId, UserType.SubAccount);
return (subAccountId, UserType.SubAccount, 0);
var id = long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value);
if (claims.FirstOrDefault(x => x.Type == "AdminAreaPermission")?.Value == "true")
return (id, UserType.Admin);
{
var roleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value ?? "0");
return (id, UserType.Admin, roleId);
}
return (id, UserType.Client);
return (id, UserType.Client, 0);
}
#endregion

View File

@@ -23,5 +23,5 @@ public interface IAuthHelper
long CurrentSubAccountId();
string GetWorkshopSlug();
string GetWorkshopName();
(long Id, UserType userType) GetUserTypeWithId();
(long Id, UserType userType, long roleId) GetUserTypeWithId();
}

View File

@@ -22,4 +22,11 @@ public interface ISmsService
string DeliveryStatus(byte? dv);
string DeliveryColorStatus(byte? dv);
string UnixTimeStampToDateTime(int? unixTimeStamp);
#region Mahan
Task<double> GetCreditAmount();
#endregion
}

View File

@@ -17,10 +17,14 @@ namespace _0_Framework.Application.Sms;
public class SmsService : ISmsService
{
private readonly IConfiguration _configuration;
public SmsIr SmsIr { get; set; }
public SmsService(IConfiguration configuration)
{
_configuration = configuration;
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
}
public void Send(string number, string message)
@@ -311,4 +315,23 @@ public class SmsService : ISmsService
//var tokenService = new Token();
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
}
#region Mahan
public async Task<double> GetCreditAmount()
{
try
{
var credit = await SmsIr.GetCreditAsync();
return (double)credit.Data;
}
catch
{
return -1;
}
}
#endregion
}

View File

@@ -14,6 +14,15 @@ public static class StaticWorkshopAccounts
/// </summary>
public static List<long> SelectedAccountsRoleIds = [3, 5, 7, 8];
/// <summary>
/// لیستی آی دی نقش هایی که دردسترسی به تب افزودن پرسنل و مدارک کلاینت دارند
/// 3 : قرارداد ارشد
/// 5 : قرارداد ساده
/// 19 : برنامه نویسان
/// 1 : مدیر سیستم
/// </summary>
public static List<long> EmployeeDocumentWorkFlowRoleIds = [1,3, 5, 19];
/// <summary>
/// لیست اکانتهایی که به همه کارگاه ها باید دسترسی داشته باشند
/// 2 - صادق فرخی

View File

@@ -41,6 +41,23 @@ public static class Tools
return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
}
/// <summary>
/// تاریخ شروع و تعداد ماه را میگیرد و تاریخ پایان قراردا را بر میگرداند
/// </summary>
/// <param name="startDate"></param>
/// <param name="monthPlus"></param>
/// <returns></returns>
public static (DateTime endDateGr, string endDateFa) FindEndOfContract(string startDate, string monthPlus)
{
int startYear = Convert.ToInt32(startDate.Substring(0, 4));
int startMonth = Convert.ToInt32(startDate.Substring(5, 2));
int startDay = Convert.ToInt32(startDate.Substring(8, 2));
var start = new PersianDateTime(startYear, startMonth, startDay);
var end = (start.AddMonths(Convert.ToInt32(monthPlus))).AddDays(-1);
return ($"{end}".ToGeorgianDateTime(), $"{end}");
}
/// <summary>
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
@@ -458,25 +475,30 @@ public static class Tools
public static double MoneyToDouble(this string myMoney)
{
string bb = string.Empty;
bool isNegative = false;
for (int x = 0; x < myMoney.Length; x++)
{
if (char.IsDigit(myMoney[x]))
{
bb += myMoney[x];
}
else if (myMoney[x] == '-' && bb.Length == 0)
{
// اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر
isNegative = true;
}
}
if (bb.Length > 0)
{
double res = double.Parse(bb);
return res;
return isNegative ? -res : res;
}
else
{
return 0;
}
}
public static string ToFileName(this DateTime date)
{
@@ -598,90 +620,90 @@ public static class Tools
/// <returns></returns>
public static int YearTotalDays(this string date)
{
int y2 = 365;
int y2 = 366;
var year = Convert.ToInt32(date.Substring(0, 4));
switch (year)
{
case 1346:
y2 = 366;
y2 = 367;
break;
case 1350:
y2 = 366;
y2 = 367;
break;
case 1354:
y2 = 366;
y2 = 367;
break;
case 1358:
y2 = 366;
y2 = 367;
break;
case 1362:
y2 = 366;
y2 = 367;
break;
case 1366:
y2 = 366;
y2 = 367;
break;
case 1370:
y2 = 366;
y2 = 367;
break;
case 1375:
y2 = 366;
y2 = 367;
break;
case 1379:
y2 = 366;
y2 = 367;
break;
case 1383:
y2 = 366;
y2 = 367;
break;
case 1387:
y2 = 366;
y2 = 367;
break;
case 1391:
y2 = 366;
y2 = 367;
break;
case 1395:
y2 = 366;
y2 = 367;
break;
case 1399:
y2 = 366;
y2 = 367;
break;
case 1403:
y2 = 366;
y2 = 367;
break;
case 1408:
y2 = 366;
y2 = 367;
break;
case 1412:
y2 = 366;
y2 = 367;
break;
case 1416:
y2 = 366;
y2 = 367;
break;
case 1420:
y2 = 366;
y2 = 367;
break;
case 1424:
y2 = 366;
y2 = 367;
break;
case 1428:
y2 = 366;
y2 = 367;
break;
case 1432:
y2 = 366;
y2 = 367;
break;
case 1436:
y2 = 366;
y2 = 367;
break;
case 1441:
y2 = 366;
y2 = 367;
break;
case 1445:
y2 = 366;
y2 = 367;
break;
default:
y2 = 365;
y2 = 366;
break;
}
@@ -884,30 +906,39 @@ public static class Tools
string result = "";
switch (value)
{
case "1":
case "01":
result = "فروردین";
break;
case "2":
case "02":
result = "اردیبهشت";
break;
case "3":
case "03":
result = "خرداد";
break;
case "4":
case "04":
result = "تیر";
break;
case "5":
case "05":
result = "مرداد";
break;
case "6":
case "06":
result = "شهریور";
break;
case "7":
case "07":
result = "مهر";
break;
case "8":
case "08":
result = "آبان";
break;
case "9":
case "09":
result = "آذر";
break;
@@ -1403,6 +1434,8 @@ public static class Tools
if (@char == char.Parse("ي"))
res += "ی";
else if (@char == char.Parse("ك"))
res += "ک";
else
res += @char;
}

View File

@@ -32,20 +32,22 @@ public class UidService : IUidService
var json = JsonConvert.SerializeObject(request);
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
try
{
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
if (!requestResult.IsSuccessStatusCode)
return null;
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian();
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian();
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian();
if (responseResult.BasicInformation != null)
{
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName?.ToPersian();
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName?.ToPersian();
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName?.ToPersian();
}
return responseResult;
}
catch (Exception)
catch
{
return null;
@@ -63,19 +65,12 @@ public class UidService : IUidService
};
var json = JsonConvert.SerializeObject(request);
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
try
{
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
if (!requestResult.IsSuccessStatusCode)
return null;
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
return responseResult;
}
catch (Exception e)
{
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
if (!requestResult.IsSuccessStatusCode)
return null;
}
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
return responseResult;
}
}

View File

@@ -1866,7 +1866,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
.Include(x => x.Task).ThenInclude(x => x.TaskSchedule)
.Where(x =>
x.Task.IsActiveString == "true" && x.Task.SenderId == accountId
&& x.Task.TaskScheduleId != null && x.Task.TaskScheduleId > 0 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest));
&& x.Task.TaskScheduleId != null && x.Task.TaskScheduleId > 0 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TaskSchedule.IsActive == IsActive.True);
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
{
raw = raw.Where(x =>

View File

@@ -10,6 +10,16 @@ namespace Company.Domain.CheckoutAgg;
public interface ICheckoutRepository : IRepository<long, Checkout>
{
/// <summary>
/// چک میکند که آیا پرسنل در سال و ماه درخواستی در این کارگاه فیش حقوقی دارد یا خیر
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeId"></param>
/// <param name="سال به صورت رشته عددی"></param>
/// <param name="ماه بصورت رشته عددی"></param>
/// <returns></returns>
(bool hasChekout, double FamilyAlloance, double OverTimePay) HasCheckout(long workshopId, long employeId,
string year, string month);
EditCheckout GetDetails(long id);
void CreateCkeckout(Checkout command);

View File

@@ -0,0 +1,26 @@
using _0_Framework.Domain;
namespace Company.Domain.ContactUsAgg;
public class ContactUs:EntityBase
{
public ContactUs(string firstName, string lastName, string email, string phoneNumber, string title, string message)
{
FirstName = firstName.Trim();
LastName = lastName.Trim();
Email = email;
PhoneNumber = phoneNumber;
Title = title;
Message = message;
FullName = FirstName + " " + LastName;
}
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string Email { get; private set; }
public string PhoneNumber { get; private set; }
public string Title { get; private set; }
public string Message { get; private set; }
public string FullName { get; private set; }
}

View File

@@ -0,0 +1,8 @@
using _0_Framework.Domain;
namespace Company.Domain.ContactUsAgg;
public interface IContactUsRepository : IRepository<long, ContactUs>
{
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.Domain;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
@@ -18,20 +19,20 @@ public class CustomizeCheckout : EntityBase
private CustomizeCheckout()
{ }
public CustomizeCheckout(DateTime contractStart, DateTime contractEnd, long employeeId, string employeeFName,
string employeeLName, DateTime employeeDateOfBirth,
string employeeNationalCode, string workshopFullName, long workshopId, long? contractId,
double monthlySalary, double fridayPay, double overTimePay, double baseYearsPay, double bonusesPay,
double nightWorkPay,
double marriedAllowance, double shiftPay, double familyAllowance, double leavePay, double insuranceDeduction,
double fineAbsenceDeduction,
double lateToWorkDeduction, double earlyExitDeduction, double rewardPay, double salaryAidDeduction,
double installmentDeduction,
double fineDeduction, double taxDeduction, string sumOfWorkingDays, string totalClaims, string totalDeductions,
double totalPayment, string contractNo, ICollection<CustomizeCheckoutFine> checkoutFines,
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards, TimeSpan lateToWorkValue, double settingSalary,
double dailyWage, WorkshopShiftStatus shiftStatus, IrregularShift irregularShift,
string employeeLName, DateTime employeeDateOfBirth,
string employeeNationalCode, string workshopFullName, long workshopId, long? contractId,
double monthlySalary, double fridayPay, double overTimePay, double baseYearsPay, double bonusesPay,
double nightWorkPay,
double marriedAllowance, double shiftPay, double familyAllowance, double leavePay, double insuranceDeduction,
double fineAbsenceDeduction,
double lateToWorkDeduction, double earlyExitDeduction, double rewardPay, double salaryAidDeduction,
double installmentDeduction,
double fineDeduction, double taxDeduction, string sumOfWorkingDays, string totalClaims, string totalDeductions,
double totalPayment, string contractNo, ICollection<CustomizeCheckoutFine> checkoutFines,
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards, TimeSpan lateToWorkValue, double settingSalary,
double dailyWage, WorkshopShiftStatus shiftStatus, IrregularShift irregularShift,
ICollection<CustomizeRotatingShift> customizeRotatingShifts, ICollection<CustomizeCheckoutRegularShift> employeeSettingsShifts)
{
YearInt = Convert.ToInt32(contractStart.ToFarsi().Substring(0, 4));
@@ -77,8 +78,8 @@ public class CustomizeCheckout : EntityBase
LateToWorkValue = lateToWorkValue;
SettingSalary = settingSalary;
DailyWage = dailyWage;
ShiftStatus = shiftStatus;
DailyWage = dailyWage;
ShiftStatus = shiftStatus;
IrregularShift = irregularShift;
CustomizeRotatingShifts = customizeRotatingShifts;
RegularShifts = employeeSettingsShifts;
@@ -257,17 +258,17 @@ public class CustomizeCheckout : EntityBase
/// </summary>
public double TotalPayment { get; private set; }
/// <summary>
/// مزد روزانه
/// </summary>
public double DailyWage { get; private set; }
/// <summary>
/// مزد روزانه
/// </summary>
public double DailyWage { get; private set; }
/// <summary>
/// حقوق تعیین شده
/// </summary>
public double SettingSalary { get; private set; }
/// <summary>
/// حقوق تعیین شده
/// </summary>
public double SettingSalary { get; private set; }
public WorkshopShiftStatus ShiftStatus { get; set; }
public WorkshopShiftStatus ShiftStatus { get; set; }
#region Values
@@ -301,4 +302,78 @@ public class CustomizeCheckout : EntityBase
#endregion
public void SetValueObjects(ICollection<CustomizeCheckoutFine> checkoutFines,
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards)
{
CheckoutFines = checkoutFines;
CustomizeCheckoutLoanInstallments = customizeCheckoutLoanInstallments;
CustomizeCheckoutSalaryAids = customizeCheckoutSalaryAids;
CustomizeCheckoutRewards = customizeCheckoutRewards;
}
public void SetRewards(ICollection<CustomizeCheckoutReward> rewards)
{
var previousTotalAmount = CustomizeCheckoutRewards.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = rewards.Sum(x => x.Amount.MoneyToDouble());
RewardPay = newTotalAmount;
IncreaseTotalPayment(previousTotalAmount, newTotalAmount);
RecalculateTotalClaims(previousTotalAmount, newTotalAmount);
CustomizeCheckoutRewards = rewards;
}
public void SetSalaryAids(ICollection<CustomizeCheckoutSalaryAid> salaryAids)
{
var previousTotalAmount = CustomizeCheckoutSalaryAids.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = salaryAids.Sum(x => x.Amount.MoneyToDouble());
SalaryAidDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount, newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CustomizeCheckoutSalaryAids = salaryAids;
}
public void SetFines(ICollection<CustomizeCheckoutFine> fines)
{
var previousTotalAmount = CheckoutFines.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = fines.Sum(x => x.Amount.MoneyToDouble());
FineDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount, newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CheckoutFines = fines;
}
public void SetLoanInstallment(ICollection<CustomizeCheckoutLoanInstallments> installments)
{
var previousTotalAmount = CustomizeCheckoutLoanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble());
var newTotalAmount = installments.Sum(x => x.AmountForMonth.MoneyToDouble());
InstallmentDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount, newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CustomizeCheckoutLoanInstallments = installments;
}
private void RecalculateTotalClaims(double previousTotalAmount, double newTotalAmount)
{
TotalClaims = (TotalClaims.MoneyToDouble() - previousTotalAmount + newTotalAmount).ToMoney();
}
private void RecalculateTotalDeduction(double previousTotalAmount, double newTotalAmount)
{
TotalDeductions = (TotalDeductions.MoneyToDouble() - previousTotalAmount + newTotalAmount).ToMoney();
}
private void ReduceTotalPayment(double previousAmount, double newAmount)
{
TotalPayment = TotalPayment + previousAmount - newAmount;
}
private void IncreaseTotalPayment(double previousAmount, double newAmount)
{
TotalPayment = TotalPayment - previousAmount + newAmount;
}
}

View File

@@ -3,7 +3,7 @@ using _0_Framework.Domain;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using System;
using System.Collections.Generic;
using _0_Framework.Application;
using System.Threading.Tasks;
namespace Company.Domain.CustomizeCheckoutAgg
{
@@ -15,5 +15,12 @@ namespace Company.Domain.CustomizeCheckoutAgg
void RemoveEmployeeCustomizeCheckoutInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
IEnumerable<CustomizeCheckout> GetRange(long workshopId, List<long> ids);
void RemoveRange(IEnumerable<CustomizeCheckout> entities);
List<CustomizeCheckout> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startDate, DateTime endDate);
Task<CustomizeCheckout> GetByWorkshopIdEmployeeIdMonthYear(long workshopId, long employeeId, int year,
int month);
(bool Checkout, bool CustomizeCheckout, bool CustomizeCheckoutTemp) ValidateExistsCheckouts(
DateTime startDate, DateTime endDate, long workshopId, List<long> employeeId);
}
}

View File

@@ -5,7 +5,7 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
public record CustomizeCheckoutFine
{
public CustomizeCheckoutFine(string title, string amount, string fineDateFa, DateTime fineDateGr, IsActive isActive, DateTime creationDate)
public CustomizeCheckoutFine(string title, string amount, string fineDateFa, DateTime fineDateGr, IsActive isActive, DateTime creationDate, long entityId)
{
Title = title;
Amount = amount;
@@ -13,6 +13,7 @@ public record CustomizeCheckoutFine
FineDateGr = fineDateGr;
IsActive = isActive;
CreationDate = creationDate;
EntityId = entityId;
}
public string Title { get; private set; }
@@ -21,4 +22,5 @@ public record CustomizeCheckoutFine
public DateTime FineDateGr { get; private set; }
public IsActive IsActive { get; private set; }
public DateTime CreationDate { get; private set; }
public long EntityId { get; set; }
}

View File

@@ -5,7 +5,7 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
public class CustomizeCheckoutLoanInstallments
{
public CustomizeCheckoutLoanInstallments(string amountForMonth, string month, string year, IsActive isActive, string loanRemaining, string loanAmount)
public CustomizeCheckoutLoanInstallments(string amountForMonth, string month, string year, IsActive isActive, string loanRemaining, string loanAmount, long entityId)
{
AmountForMonth = amountForMonth;
Month = month;
@@ -13,6 +13,7 @@ public class CustomizeCheckoutLoanInstallments
IsActive = isActive;
LoanRemaining = loanRemaining;
LoanAmount = loanAmount;
EntityId = entityId;
}
public string AmountForMonth { get; private set; }
@@ -21,5 +22,7 @@ public class CustomizeCheckoutLoanInstallments
public string LoanRemaining { get; set; }
public IsActive IsActive { get; private set; }
public string LoanAmount { get; set; }
public long EntityId { get; set; }
}

View File

@@ -5,7 +5,7 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
public class CustomizeCheckoutReward
{
public CustomizeCheckoutReward(string amount, string description, DateTime grantDate, string grantDateFa, IsActive isActive, string title)
public CustomizeCheckoutReward(string amount, string description, DateTime grantDate, string grantDateFa, IsActive isActive, string title, long entityId)
{
Amount = amount;
Description = description;
@@ -13,6 +13,7 @@ public class CustomizeCheckoutReward
GrantDateFa = grantDateFa;
IsActive = isActive;
Title = title;
EntityId = entityId;
}
/// <summary>
@@ -39,5 +40,7 @@ public class CustomizeCheckoutReward
public IsActive IsActive { get; private set; }
public long EntityId { get; set; }
}

View File

@@ -4,14 +4,23 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
public class CustomizeCheckoutSalaryAid
{
public CustomizeCheckoutSalaryAid(string amount, DateTime salaryAidDateTime, string salaryAidDateTimeFa)
public CustomizeCheckoutSalaryAid(string amount, DateTime salaryAidDateTime, string salaryAidDateTimeFa,DateTime calculationDateTime,string calculationDateTimeFa, long entityId)
{
Amount = amount;
SalaryAidDateTime = salaryAidDateTime;
SalaryAidDateTimeFa = salaryAidDateTimeFa;
CalculationDateTime = calculationDateTime;
CalculationDateTimeFa = calculationDateTimeFa;
EntityId = entityId;
}
public string Amount { get; private set; }
public DateTime SalaryAidDateTime { get; private set; }
public string SalaryAidDateTimeFa { get; private set; }
public DateTime CalculationDateTime { get; private set; }
public string CalculationDateTimeFa { get; private set; }
public long EntityId { get; set; }
}

View File

@@ -8,6 +8,7 @@ using System.Collections.Generic;
using Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using System.Linq;
namespace Company.Domain.CustomizeCheckoutTempAgg;
@@ -303,6 +304,77 @@ public class CustomizeCheckoutTemp : EntityBase
public Workshop Workshop { get; set; }
public Employee Employee { get; set; }
#endregion
#endregion
public void SetValueObjects(ICollection<CustomizeCheckoutTempFine> checkoutFines,
ICollection<CustomizeCheckoutTempLoanInstallments> customizeCheckoutLoanInstallments,
ICollection<CustomizeCheckoutTempSalaryAid> customizeCheckoutSalaryAids,
ICollection<CustomizeCheckoutTempReward> customizeCheckoutRewards)
{
CheckoutFines = checkoutFines;
CustomizeCheckoutLoanInstallments = customizeCheckoutLoanInstallments;
CustomizeCheckoutSalaryAids = customizeCheckoutSalaryAids;
CustomizeCheckoutRewards = customizeCheckoutRewards;
}
public void SetRewards(ICollection<CustomizeCheckoutTempReward> rewards)
{
var previousTotalAmount = CustomizeCheckoutRewards.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = rewards.Sum(x => x.Amount.MoneyToDouble());
RewardPay = newTotalAmount;
IncreaseTotalPayment(previousTotalAmount,newTotalAmount);
RecalculateTotalClaims(previousTotalAmount, newTotalAmount);
CustomizeCheckoutRewards = rewards;
}
public void SetSalaryAids(ICollection<CustomizeCheckoutTempSalaryAid> salaryAids)
{
var previousTotalAmount = CustomizeCheckoutSalaryAids.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = salaryAids.Sum(x => x.Amount.MoneyToDouble());
SalaryAidDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount,newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CustomizeCheckoutSalaryAids = salaryAids;
}
public void SetFines(ICollection<CustomizeCheckoutTempFine> fines)
{
var previousTotalAmount = CheckoutFines.Sum(x => x.Amount.MoneyToDouble());
var newTotalAmount = fines.Sum(x => x.Amount.MoneyToDouble());
FineDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount,newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CheckoutFines = fines;
}
public void SetLoanInstallment(ICollection<CustomizeCheckoutTempLoanInstallments> installments)
{
var previousTotalAmount = CustomizeCheckoutLoanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble());
var newTotalAmount = installments.Sum(x => x.AmountForMonth.MoneyToDouble());
InstallmentDeduction = newTotalAmount;
ReduceTotalPayment(previousTotalAmount,newTotalAmount);
RecalculateTotalDeduction(previousTotalAmount, newTotalAmount);
CustomizeCheckoutLoanInstallments = installments;
}
private void RecalculateTotalClaims(double previousTotalAmount, double newTotalAmount)
{
TotalClaims = (TotalClaims.MoneyToDouble() - previousTotalAmount + newTotalAmount).ToMoney();
}
private void RecalculateTotalDeduction(double previousTotalAmount, double newTotalAmount)
{
TotalDeductions = (TotalDeductions.MoneyToDouble() - previousTotalAmount + newTotalAmount).ToMoney();
}
private void ReduceTotalPayment(double previousAmount, double newAmount)
{
TotalPayment = TotalPayment + previousAmount - newAmount;
}
private void IncreaseTotalPayment(double previousAmount, double newAmount)
{
TotalPayment = TotalPayment - previousAmount + newAmount;
}
}

View File

@@ -4,6 +4,7 @@ using Company.Domain.CustomizeCheckoutAgg;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Company.Domain.CustomizeCheckoutTempAgg
{
@@ -19,5 +20,7 @@ namespace Company.Domain.CustomizeCheckoutTempAgg
IEnumerable<CustomizeCheckoutTemp> GetRange(long workshopId, List<long> ids);
void RemoveRange(IEnumerable<CustomizeCheckoutTemp> entities);
List<CustomizeCheckoutTemp> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startDate, DateTime endDate);
Task<CustomizeCheckoutTemp> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
}
}

View File

@@ -4,14 +4,23 @@ namespace Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
public class CustomizeCheckoutTempSalaryAid
{
public CustomizeCheckoutTempSalaryAid(string amount, DateTime salaryAidDateTime, string salaryAidDateTimeFa)
public CustomizeCheckoutTempSalaryAid(string amount, DateTime salaryAidDateTime, string salaryAidDateTimeFa,
DateTime calculationDateTime, string calculationDateTimeFa, long entityId)
{
Amount = amount;
SalaryAidDateTime = salaryAidDateTime;
SalaryAidDateTimeFa = salaryAidDateTimeFa;
CalculationDateTime = calculationDateTime;
CalculationDateTimeFa = calculationDateTimeFa;
EntityId = entityId;
}
public string Amount { get; private set; }
public DateTime SalaryAidDateTime { get; private set; }
public string SalaryAidDateTimeFa { get; private set; }
public DateTime CalculationDateTime { get; private set; }
public string CalculationDateTimeFa { get; private set; }
public long EntityId { get; set; }
}

View File

@@ -6,7 +6,7 @@ namespace Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
public record CustomizeCheckoutTempFine
{
public CustomizeCheckoutTempFine(string title, string amount, string fineDateFa, DateTime fineDateGr, IsActive isActive, DateTime creationDate)
public CustomizeCheckoutTempFine(string title, string amount, string fineDateFa, DateTime fineDateGr, IsActive isActive, DateTime creationDate, long entityId)
{
Title = title;
Amount = amount;
@@ -14,7 +14,7 @@ public record CustomizeCheckoutTempFine
FineDateGr = fineDateGr;
IsActive = isActive;
CreationDate = creationDate;
EntityId = entityId;
}
public string Title { get; private set; }
public string Amount { get; private set; }
@@ -22,4 +22,6 @@ public record CustomizeCheckoutTempFine
public DateTime FineDateGr { get; private set; }
public IsActive IsActive { get; private set; }
public DateTime CreationDate { get; private set; }
public long EntityId { get; set; }
}

View File

@@ -4,7 +4,7 @@ namespace Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
public class CustomizeCheckoutTempLoanInstallments
{
public CustomizeCheckoutTempLoanInstallments(string amountForMonth, string month, string year, IsActive isActive, string loanRemaining, string loanAmount)
public CustomizeCheckoutTempLoanInstallments(string amountForMonth, string month, string year, IsActive isActive, string loanRemaining, string loanAmount, long entityId)
{
AmountForMonth = amountForMonth;
Month = month;
@@ -12,6 +12,7 @@ public class CustomizeCheckoutTempLoanInstallments
IsActive = isActive;
LoanRemaining = loanRemaining;
LoanAmount = loanAmount;
EntityId = entityId;
}
public string AmountForMonth { get; private set; }
@@ -20,5 +21,7 @@ public class CustomizeCheckoutTempLoanInstallments
public IsActive IsActive { get; private set; }
public string LoanRemaining { get; set; }
public string LoanAmount { get; set; }
public long EntityId { get; set; }
}

View File

@@ -5,7 +5,7 @@ namespace Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
public class CustomizeCheckoutTempReward
{
public CustomizeCheckoutTempReward(string amount, string description, DateTime grantDate, string grantDateFa, IsActive isActive, string title)
public CustomizeCheckoutTempReward(string amount, string description, DateTime grantDate, string grantDateFa, IsActive isActive, string title, long entityId)
{
Amount = amount;
Description = description;
@@ -13,6 +13,7 @@ public class CustomizeCheckoutTempReward
GrantDateFa = grantDateFa;
IsActive = isActive;
Title = title;
EntityId = entityId;
}
/// <summary>
@@ -37,4 +38,6 @@ public class CustomizeCheckoutTempReward
public IsActive IsActive { get; private set; }
public string Title { get; set; }
public long EntityId { get; set; }
}

View File

@@ -15,4 +15,5 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository<long
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId);
bool CheckEmployeeShiftHasChanged(EditCustomizeEmployeeSettings command);
}

View File

@@ -20,14 +20,14 @@ public class Employee : EntityBase
{
public Employee(string fName, string lName, string fatherName,
DateTime dateOfBirth, DateTime dateOfIssue, string placeOfIssue,
string nationalCode, string idNumber, string gender, string nationality,
string nationalCode, string idNumber, string gender, string nationality, string idNumberSerial , string idNumberSeri ,
string phone = null, string address = null, string state = null, string city = null,
string maritalStatus = null, string militaryService = null, string levelOfEducation = null, string fieldOfStudy = null,
string bankCardNumber = null, string bankBranch = null, string insuranceCode = null, string insuranceHistoryByYear = null,
string insuranceHistoryByMonth = null, string numberOfChildren = null, string officePhone = null,
string mclsUserName = null, string mclsPassword = null,
string eserviceUserName = null, string eservicePassword = null,
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null)
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null )
{
FName = fName;
LName = lName;
@@ -146,6 +146,15 @@ public class Employee : EntityBase
/// آیا پرسنل احراز هویت شده است
/// </summary>
public bool IsAuthorized { get; set; }
/// <summary>
/// سریال شناسنامه
/// </summary>
public string IdNumberSerial { get; set; }
/// <summary>
/// سری شناسنامه
/// </summary>
public string IdNumberSeri { get; set; }
#endregion
@@ -234,5 +243,39 @@ public class Employee : EntityBase
IsAuthorized = true;
}
public void EditAuthorizeEmployee(DateTime dateOfIssue, string placeOfIssue,
string phone, string address, string state, string citi,
string maritalStatus, string militaryService, string levelOfEducation, string fieldOfStudy,
string bankCardNumber, string bankBranch, string insuranceCode, string insuranceHistoryByYear,
string insuranceHistoryByMonth, string numberOfChildren, string officePhone,
string mclsUserName, string mclsPassword, string eserviceUserName, string eservicePassword, string taxOfficeUserName, string taxOfficepassword, string sanaUserName, string sanaPassword)
{
DateOfIssue = dateOfIssue;
PlaceOfIssue = placeOfIssue;
Phone = phone;
Address = address;
State = state;
City = citi;
MaritalStatus = maritalStatus;
MilitaryService = militaryService;
LevelOfEducation = levelOfEducation;
FieldOfStudy = fieldOfStudy;
BankCardNumber = bankCardNumber;
BankBranch = bankBranch;
InsuranceCode = insuranceCode;
InsuranceHistoryByYear = insuranceHistoryByYear;
InsuranceHistoryByMonth = insuranceHistoryByMonth;
NumberOfChildren = numberOfChildren;
OfficePhone = OfficePhone;
MclsUserName = mclsUserName;
MclsPassword = mclsPassword;
EserviceUserName = eserviceUserName;
EservicePassword = eservicePassword;
TaxOfficeUserName = taxOfficeUserName;
TaxOfficepassword = taxOfficepassword;
SanaUserName = sanaUserName;
SanaPassword = sanaPassword;
}
#endregion
}

View File

@@ -0,0 +1,44 @@
using System;
using _0_Framework.Application;
using _0_Framework.Domain;
namespace Company.Domain.EmployeeAuthorizeTempAgg;
public class EmployeeAuthorizeTemp:EntityBase
{
public EmployeeAuthorizeTemp(Gender gender, string fName, string lName, string fatherName, DateTime birthDate, string nationalCode, string idNumber, string idNumberSerial, string idNumberSeri)
{
Gender = gender;
FName = fName;
LName = lName;
FatherName = fatherName;
BirthDate = birthDate;
NationalCode = nationalCode;
IdNumber = idNumber;
IdNumberSerial = idNumberSerial;
IdNumberSeri = idNumberSeri;
}
public Gender Gender { get; private set; }
public string FName { get; private set; }
public string LName { get; private set; }
public string FatherName { get; private set; }
public DateTime BirthDate { get; private set; }
/// <summary>
/// کدملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شماره شناسنامه
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// سریال شناسنامه
/// </summary>
public string IdNumberSerial { get; set; }
/// <summary>
/// سری شناسنامه
/// </summary>
public string IdNumberSeri { get; set; }
}

View File

@@ -0,0 +1,10 @@
using System;
using System.Threading.Tasks;
using _0_Framework.Domain;
namespace Company.Domain.EmployeeAuthorizeTempAgg;
public interface IEmployeeAuthorizeTempRepository:IRepository<long,EmployeeAuthorizeTemp>
{
Task<EmployeeAuthorizeTemp> GetByNationalCode(string nationalCode);
}

View File

@@ -1,4 +1,6 @@
using _0_Framework.Domain;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.EmployeeClientTemp;
namespace Company.Domain.EmployeeClientTempAgg;
@@ -8,4 +10,5 @@ public interface IEmployeeClientTempRepository : IRepository<long, EmployeeClien
EmployeeClientTemp GetByEmployeeIdAndWorkshopId(long employeeId, long commandWorkshopId);
EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
void Remove(EmployeeClientTemp entity);
Task<List<EmployeeClientTempViewModel>> GetByEmployeeId(long employeeId);
}

View File

@@ -7,100 +7,105 @@ using System.Collections.Generic;
using _0_Framework.Application;
using Microsoft.AspNetCore.JsonPatch.Operations;
namespace Company.Domain.EmployeeDocumentItemAgg
namespace Company.Domain.EmployeeDocumentItemAgg;
public class EmployeeDocumentItem : EntityBase
{
public class EmployeeDocumentItem : EntityBase
private EmployeeDocumentItem() { }
public long WorkshopId { get; private set; }
public long EmployeeId { get; private set; }
public long UploaderId { get; private set; }
public UserType UploaderType { get; private set; }
public long UploaderRoleId { get; set; }
public long ReviewedById { get; private set; }
public string RejectionReason { get; private set; }
public DocumentStatus DocumentStatus { get; private set; }
public long MediaId { get; private set; }
public DateTime? ConfirmationDateTime { get; private set; }
public DocumentItemLabel DocumentLabel { get; private set; }
public long EmployeeDocumentId { get; private set; }
public virtual EmployeeDocuments EmployeeDocuments { get; private set; }
public long? EmployeeDocumentsAdminViewId { get; private set; }
public EmployeeDocumentsAdminSelection EmployeeDocumentsAdminSelection { get; private set; }
public List<EmployeeDocumentItemLog> ItemLogs { get; private set; }
public EmployeeDocumentItem(long workshopId, long employeeId, long mediaId, long employeeDocumentId, DocumentItemLabel documentLabel, long uploaderId,
UserType uploaderType, long roleId, DocumentStatus documentStatus = DocumentStatus.Unsubmitted)
{
public long WorkshopId { get; private set; }
public long EmployeeId { get; private set; }
public long UploaderId { get; private set; }
public UserType UploaderType { get; private set; }
public long ReviewedById { get; private set; }
public string RejectionReason { get; private set; }
public DocumentStatus DocumentStatus { get; private set; }
public long MediaId { get; private set; }
public DateTime? ConfirmationDateTime { get; private set; }
public DocumentItemLabel DocumentLabel { get; private set; }
public long EmployeeDocumentId { get; private set; }
public virtual EmployeeDocuments EmployeeDocuments { get; private set; }
public long? EmployeeDocumentsAdminViewId { get; private set; }
public EmployeeDocumentsAdminSelection EmployeeDocumentsAdminSelection { get; private set; }
public List<EmployeeDocumentItemLog> ItemLogs { get; private set; }
public EmployeeDocumentItem(long workshopId,long employeeId, long mediaId, long employeeDocumentId, DocumentItemLabel documentLabel, long uploaderId,
UserType uploaderType, DocumentStatus documentStatus = DocumentStatus.Unsubmitted)
{
MediaId = mediaId;
UploaderId = uploaderId;
UploaderType = uploaderType;
EmployeeId = employeeId;
WorkshopId = workshopId;
DocumentStatus = documentStatus;
if (documentStatus == DocumentStatus.Confirmed)
ConfirmationDateTime = DateTime.Now;
DocumentLabel = documentLabel;
EmployeeDocumentId = employeeDocumentId;
ItemLogs =
[
new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.CreatedNewItem, uploaderId, uploaderType)
];
}
public void Confirm(long operatorId, UserType userType)
{
ReviewedById = operatorId;
DocumentStatus = DocumentStatus.Confirmed;
MediaId = mediaId;
UploaderId = uploaderId;
UploaderType = uploaderType;
UploaderRoleId = uploaderType == UserType.Admin ? roleId : -1;
EmployeeId = employeeId;
WorkshopId = workshopId;
DocumentStatus = documentStatus;
if (documentStatus == DocumentStatus.Confirmed)
ConfirmationDateTime = DateTime.Now;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.ConfirmedItem, operatorId, userType));
}
public void Reject(long operatorId, string rejectionReason, UserType userType)
{
RejectionReason = rejectionReason;
DocumentStatus = DocumentStatus.Rejected;
EmployeeDocuments.UpdateHasRejectedItems();
ReviewedById = operatorId;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.RejectedItem, operatorId, userType, rejectionReason));
}
public void Delete(long operatorId, UserType operatorType)
{
DocumentStatus = DocumentStatus.Deleted;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.DeletedItem, operatorId, operatorType));
}
public void AdminSelect(long adminViewId)
{
EmployeeDocumentsAdminViewId = adminViewId;
}
public void AdminDeselect()
{
EmployeeDocumentsAdminViewId = 0;
}
public void SubmitByClient(long operatorId,UserType operatorType)
{
DocumentStatus = DocumentStatus.SubmittedByClient;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.SubmittedItems, operatorId, operatorType));
EmployeeDocuments.UpdateHasRejectedItems();
}
public void SubmitByAdmin(long operatorId, UserType operatorType)
{
DocumentStatus = DocumentStatus.SubmittedByAdmin;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.SubmittedItems, operatorId, operatorType));
EmployeeDocuments.UpdateHasRejectedItems();
}
DocumentLabel = documentLabel;
EmployeeDocumentId = employeeDocumentId;
ItemLogs =
[
new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.CreatedNewItem, uploaderId, uploaderType)
];
}
}
public void Confirm(long operatorId, UserType userType)
{
ReviewedById = operatorId;
DocumentStatus = DocumentStatus.Confirmed;
ConfirmationDateTime = DateTime.Now;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.ConfirmedItem, operatorId, userType));
}
public void Reject(long operatorId, string rejectionReason, UserType userType)
{
RejectionReason = rejectionReason;
DocumentStatus = DocumentStatus.Rejected;
EmployeeDocuments.UpdateHasRejectedItems();
ReviewedById = operatorId;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.RejectedItem, operatorId, userType, rejectionReason));
}
public void Delete(long operatorId, UserType operatorType)
{
DocumentStatus = DocumentStatus.Deleted;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.DeletedItem, operatorId, operatorType));
}
public void AdminSelect(long adminViewId)
{
EmployeeDocumentsAdminViewId = adminViewId;
}
public void AdminDeselect()
{
EmployeeDocumentsAdminViewId = 0;
}
public void SubmitByClient(long operatorId, UserType operatorType)
{
DocumentStatus = DocumentStatus.SubmittedByClient;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.SubmittedItems, operatorId, operatorType));
EmployeeDocuments.UpdateHasRejectedItems();
}
public void SubmitByAdmin(long operatorId, UserType operatorType)
{
DocumentStatus = DocumentStatus.SubmittedByAdmin;
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.SubmittedItems, operatorId, operatorType));
EmployeeDocuments.UpdateHasRejectedItems();
}
public void SetRoleId(long roleId)
{
UploaderRoleId = roleId;
}
}

View File

@@ -9,12 +9,12 @@ namespace Company.Domain.EmployeeDocumentsAgg
{
List<DocumentItemLabel> requiredDocuments =
[
DocumentItemLabel.IdCardPage1, DocumentItemLabel.IdCardPage2, DocumentItemLabel.IdCardPage3, DocumentItemLabel.NationalCardRear,
DocumentItemLabel.NationalCardFront,DocumentItemLabel.EmployeePicture
DocumentItemLabel.IdCardPage1,/* DocumentItemLabel.IdCardPage2, DocumentItemLabel.IdCardPage3, DocumentItemLabel.NationalCardRear,*/
DocumentItemLabel.NationalCardFront,/*DocumentItemLabel.EmployeePicture*/
];
if (gender == "مرد")
requiredDocuments.Add(DocumentItemLabel.MilitaryServiceCard);
//if (gender == "مرد")
// requiredDocuments.Add(DocumentItemLabel.MilitaryServiceCard);
return requiredDocuments;
}

View File

@@ -9,7 +9,7 @@ using CompanyManagment.App.Contracts.Workshop;
namespace Company.Domain.EmployeeDocumentsAgg
{
public interface IEmployeeDocumentsRepository : IRepository<long, EmployeeDocuments>
{
{
EmployeeDocuments GetByEmployeeIdWorkshopId(long employeeId, long workshopId);
EmployeeDocumentsViewModel GetViewModelByEmployeeIdWorkshopId(long employeeId, long workshopId);
List<EmployeeDocumentsViewModel> SearchForClient(SearchEmployeeDocuments cmd);
@@ -30,5 +30,76 @@ namespace Company.Domain.EmployeeDocumentsAgg
Task<int> GetAdminWorkFlowCountForNewEmployees(List<long> workshopIds);
Task<int> GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List<long> workshopIds);
List<EmployeeDocumentsViewModel> GetDocumentsAwaitingReviewByWorkshopIdForCheckerWorkFlow(long workshopId);
#region Mahan
/// <summary>
/// کارگاهی که افزودن پرسنل کرده اند. بر اساس نقش فیلتر میشوند
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentCreatedEmployeeForAdmin(
List<long> workshops, long roleId);
/// <summary>
///کارگاه های مدارک های برگشت خورده براساس دسترسی افراد و نقششان. یک مدرک برگشت خورده به تمامی کسانی که به آن کارگاه دسترسی دارند و تمامی کسانی که هم نقش آپلود کننده بوده اند نمایش داده میشود
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentRejectedForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// مدارک های برگشت خورده براساس دسترسی افراد و نقششان. یک مدرک برگشت خورده به تمامی کسانی که به آن کارگاه دسترسی دارند و تمامی کسانی که هم نقش آپلود کننده بوده اند نمایش داده میشود
/// </summary>
/// <param name="workshopId"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetRejectedItemsByWorkshopIdAndRoleForAdminWorkFlow(long workshopId,
long roleId);
/// <summary>
/// کارگاه هایی که افزودن پرسنل کرده اند و مدارک آنها ناقص است
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetCreatedEmployeesWorkshopDocumentForAdmin(
List<long> workshops,long roleId);
/// <summary>
/// پرسنلی که افزوده شده اند در کارگاه و آپلود مدارک آنها ناقص است
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetCreatedEmployeesDocumentByWorkshopIdForAdmin(long workshopId);
/// <summary>
/// لیست کارگاه هایی که مدارک آپلود شده توسط کلاینت برگشت خورده است در کارپوشه ادمین
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetClientRejectedDocumentWorkshopsForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// مدارک های آپلود شده توسط کلاینت در کارگاه که برگشت خورده اند در کارپوشه ادمین
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentByWorkshopIdForAdmin(long workshopId);
/// <summary>
/// مدارک های برگشت خورده برای کلاینت
/// </summary>
/// <param name="workshopId"></param>
/// <param name="accountId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentForClient(long workshopId, long accountId);
#endregion
}
}

View File

@@ -12,7 +12,7 @@ public class EmployeeInsurancListData : EntityBase
{
public EmployeeInsurancListData(long insuranceListId, long employeeId, int workingDays, double dailyWage, double monthlySalary,
double monthlyBenefits, double monthlyBenefitsIncluded, double benefitsIncludedContinuous, double benefitsIncludedNonContinuous,
double insuranceShare, DateTime startWorkDate, DateTime? leftWorkDate, long jobId,bool includeStatus, double baseYears, double marriedAllowance)
double insuranceShare, DateTime startWorkDate, DateTime? leftWorkDate, long jobId,bool includeStatus, double baseYears, double marriedAllowance, double overTimePay, double familyAllowance)
{
InsuranceListId = insuranceListId;
EmployeeId = employeeId;
@@ -30,6 +30,8 @@ public class EmployeeInsurancListData : EntityBase
IncludeStatus = includeStatus;
BaseYears = baseYears;
MarriedAllowance = marriedAllowance;
OverTimePay = overTimePay;
FamilyAllowance = familyAllowance;
DailyWagePlusBaseYears = dailyWage + baseYears;
}
@@ -110,10 +112,20 @@ public class EmployeeInsurancListData : EntityBase
/// </summary>
public double MarriedAllowance { get; private set; }
/// <summary>
/// اضافه کار فیش حقوقی
/// </summary>
public double OverTimePay { get; private set; }
/// <summary>
/// حق اولاد فیش حقوقی
/// </summary>
public double FamilyAllowance { get; private set; }
public void Edit(int workingDays, double dailyWage, double monthlySalary, double monthlyBenefits, double monthlyBenefitsIncluded,
double benefitsIncludedContinuous, double benefitsIncludedNonContinuous, double insuranceShare, DateTime startWorkDate,
DateTime? leftWorkDate, long jobId, bool includeStatus, double baseYears, double marriedAllowance)
DateTime? leftWorkDate, long jobId, bool includeStatus, double baseYears, double marriedAllowance, double overTimePay, double familyAllowance)
{
WorkingDays = workingDays;
@@ -130,6 +142,8 @@ public class EmployeeInsurancListData : EntityBase
IncludeStatus= includeStatus;
BaseYears = baseYears;
MarriedAllowance = marriedAllowance;
OverTimePay = overTimePay;
FamilyAllowance = familyAllowance;
DailyWagePlusBaseYears = dailyWage + baseYears;
}

View File

@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.LeftWorkTemp;
@@ -14,4 +15,6 @@ public interface ILeftWorkTempRepository:IRepository<long,LeftWorkTemp>
/// <returns></returns>
Task<GetStartWorkTempDetails> GetStartAndLeftWorkDetails(long employeeId, long workshopId);
void Remove(LeftWorkTemp entity);
List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId);
Task<List<LeftWorkTempViewModel>> GetLeftWorkTempsByEmployeeId(long employeeId);
}

View File

@@ -15,6 +15,7 @@ using System.Threading.Tasks;
using _0_Framework.Application;
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using System.Collections;
namespace Company.Domain.RollCallAgg.DomainService;
@@ -25,11 +26,15 @@ public interface IRollCallDomainService
long workshopId);
TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId);
DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate,DateTime rollCallEndDate);
DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate, DateTime rollCallEndDate);
void CalculateTimeDifferences(RollCall rollCall);
(DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts);
(DateTime start, DateTime end) FindRotatingShift(List<(DateTime StartDate, DateTime EndDate)> rollcalls, ICollection<CustomizeRotatingShift> rotatingShifts);
BreakTime GetBreakTime(long employeeId, long workshopId);
}
public class RollCallDomainService : IRollCallDomainService
@@ -173,16 +178,16 @@ public class RollCallDomainService : IRollCallDomainService
}
public DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId,
DateTime rollCallStartDate,DateTime rollCallEndDate)
DateTime rollCallStartDate, DateTime rollCallEndDate)
{
var shiftDetails = GetEmployeeShiftDetails(employeeId, workshopId);
var offset = GetEmployeeOffSetForRegularSettings(employeeId, workshopId);
return shiftDetails.shiftType switch
{
WorkshopShiftStatus.Regular => CalculateRegularShiftDate(rollCallStartDate, offset),
WorkshopShiftStatus.Rotating => FindRotatingShift(rollCallEndDate,rollCallEndDate,shiftDetails.rotatingShifts).start.Date,
WorkshopShiftStatus.Rotating => FindRotatingShift(rollCallStartDate, rollCallEndDate, shiftDetails.rotatingShifts).start.Date,
WorkshopShiftStatus.Irregular => rollCallStartDate.Date,
_ => throw new ArgumentOutOfRangeException()
};
@@ -216,6 +221,7 @@ public class RollCallDomainService : IRollCallDomainService
rollCalls.Remove(deletedRollCall);
rollCalls.Add(rollCall);
rollCall.ClearTimeDiff();
switch (shiftDetails.shiftType)
{
case WorkshopShiftStatus.Regular:
@@ -256,7 +262,8 @@ public class RollCallDomainService : IRollCallDomainService
var lateEntryRollCall = rollCallsInShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > employeeShift.start);
var previousShift = employeeShifts.OrderByDescending(x => x.start)
.FirstOrDefault(x => x.end < employeeShift.start);
@@ -299,8 +306,6 @@ public class RollCallDomainService : IRollCallDomainService
var lateExitRollCall = rollCallsInShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > employeeShift.end);
// تعجیل در خروج - زود رفتن
var nextShift = employeeShifts.OrderBy(x => x.start)
.FirstOrDefault(x => x.start > employeeShift.end);
@@ -353,7 +358,9 @@ public class RollCallDomainService : IRollCallDomainService
var rotatingShifts = shiftDetails.rotatingShifts;
var shift = FindRotatingShift(starDateTime, endDateTime, rotatingShifts);
var rollCallStartEnds = rollCalls.Select(x => (x.StartDate.Value, x.EndDate.Value)).ToList();
var shift = FindRotatingShift(rollCallStartEnds, rotatingShifts);
var rotatingShiftStart = shift.start;
var rotatingShiftEnd = shift.end;
@@ -373,8 +380,8 @@ public class RollCallDomainService : IRollCallDomainService
var earlyEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate < shift.start);
var lateEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > shift.start);
//برای خالی کردن اولیه حضور غیاب انتخاب شده
earlyEntryRollCallRotating?.SetEarlyEnter(TimeSpan.Zero);
if (earlyEntryRollCallRotating != null)
{
@@ -403,9 +410,10 @@ public class RollCallDomainService : IRollCallDomainService
var earlyExitRollCallRotating = rollCallsInRotatingShift.OrderByDescending(x => x.EndDate).FirstOrDefault(x => x.EndDate < shift.end);
var lateExitRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > shift.end);
//برای خالی کردن اولیه حضور غیاب انتخاب شده
earlyExitRollCallRotating?.SetEarlyExit(TimeSpan.Zero);
if (earlyExitRollCallRotating != null && (rollCallsInRotatingShift.Any(x =>
x.StartDate < rotatingShiftEnd && x.StartDate > earlyExitRollCallRotating.EndDate) == false))
@@ -448,17 +456,6 @@ public class RollCallDomainService : IRollCallDomainService
DateTime startDate = startRollCall.Date;
DateTime endDate = endRollCall.Date;
DateTime startEntryWithDate = startDate.Add(startRollCall.TimeOfDay);
DateTime endEntryWithDate = endDate.Add(endRollCall.TimeOfDay);
DateTime oneHourBeforeStart = startEntryWithDate.AddHours(-1);
DateTime oneHourAfterStart = startEntryWithDate.AddHours(1);
DateTime oneHourBeforeEnd = endEntryWithDate.AddHours(-1);
DateTime oneHourAfterEnd = endEntryWithDate.AddHours(1);
var shiftDateTimes = rotatingShifts.SelectMany(shift =>
{
var shifts = new List<(DateTime Start, DateTime End)>();
@@ -477,56 +474,69 @@ public class RollCallDomainService : IRollCallDomainService
#region مقایسه شروع حضور غیاب با شیفت
var startFilteredTimes = shiftDateTimes.Where(shift =>
(oneHourBeforeStart <= shift.Start && oneHourAfterStart >= shift.Start) ||
(oneHourBeforeStart <= shift.End && oneHourAfterStart >= shift.End)).ToList();
//var startFilteredTimes = shiftDateTimes.Where(shift =>
// (twoHourBeforeStart <= shift.Start && twoHourAfterStart >= shift.Start) ||
// (twoHourBeforeStart <= shift.End && twoHourAfterStart >= shift.End)).ToList();
if (startFilteredTimes.Count == 0)
{
startFilteredTimes = shiftDateTimes;
}
else if (startFilteredTimes.Count == 1)
{
var startChosenShift = startFilteredTimes.First();
//if (startFilteredTimes.Count == 0)
//{
// startFilteredTimes = shiftDateTimes;
//}
//else if (startFilteredTimes.Count == 1)
//{
// var startChosenShift = startFilteredTimes.First();
if (startChosenShift.End < startChosenShift.Start)
startChosenShift.End = startChosenShift.End.AddDays(1);
// if (startChosenShift.End < startChosenShift.Start)
// startChosenShift.End = startChosenShift.End.AddDays(1);
return startChosenShift;
}
// return startChosenShift;
//}
#endregion
//#endregion
#region مقایسه پایان حضورغیاب با شیفت
var endFilteredTimes = shiftDateTimes.Where(shift =>
(oneHourBeforeEnd <= shift.Start && oneHourAfterEnd >= shift.Start) ||
(oneHourBeforeEnd <= shift.End && oneHourAfterEnd >= shift.End)).ToList();
if (endFilteredTimes.Count == 0)
{
endFilteredTimes = startFilteredTimes;
}
else if (endFilteredTimes.Count == 1)
{
var endChosenShift = endFilteredTimes.First();
return endChosenShift;
}
//#region مقایسه پایان حضورغیاب با شیفت
//var endFilteredTimes = shiftDateTimes.Where(shift =>
// (twoHourBeforeEnd <= shift.Start && twoHourAfterEnd >= shift.Start) ||
// (twoHourBeforeEnd <= shift.End && twoHourAfterEnd >= shift.End)).ToList();
//if (endFilteredTimes.Count == 0)
//{
// endFilteredTimes = startFilteredTimes;
//}
//else if (endFilteredTimes.Count == 1)
//{
// var endChosenShift = endFilteredTimes.First();
// return endChosenShift;
//}
#endregion
#region اشتراک حضور غیاب و شیفت
var overlapShifts = endFilteredTimes.Select(shift => new
{
Shift = shift,
Overlap = new TimeSpan(Math.Max(0,
Math.Min(shift.End.Ticks, oneHourAfterEnd.Ticks) -
Math.Max(shift.Start.Ticks, oneHourBeforeStart.Ticks)))
});
var overlapShifts = shiftDateTimes
.Select(shift => new
{
Shift = shift,
Overlap = new TimeSpan(Math.Max(0,
Math.Min(shift.End.Ticks, endRollCall.Ticks) -
Math.Max(shift.Start.Ticks, startRollCall.Ticks))),
// زمان حضور فرد در شیفت (مجموع Overlap با شیفت)
TotalTimeInShift = new TimeSpan(Math.Max(0,
Math.Min(shift.End.Ticks, endRollCall.Ticks) -
Math.Max(shift.Start.Ticks, startRollCall.Ticks))),
StartDistance = Math.Abs((shift.Start - startRollCall).Ticks),
EndDistance = Math.Abs((shift.End - endRollCall).Ticks),
TotalDistance = Math.Abs((shift.Start - startRollCall).Ticks) + Math.Abs((shift.End - endRollCall).Ticks)
})
.OrderByDescending(s => s.TotalTimeInShift) // 1. بیشترین زمان حضور فرد
.ThenByDescending(s => s.Overlap) // 2. بیشترین Overlap
.ThenBy(s => s.TotalDistance)
.ThenBy(s => s.StartDistance)
.ThenBy(x => x.EndDistance); // 3. اگر برابر بود،
var overlapChosenShift = overlapShifts.MaxBy(s => s.Overlap);
var overlapChosenShift = overlapShifts.First();
var end = overlapChosenShift.Shift.End;
if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start)
end = overlapChosenShift.Shift.End.AddDays(1);
@@ -537,6 +547,145 @@ public class RollCallDomainService : IRollCallDomainService
#endregion
}
public (DateTime start, DateTime end) FindRotatingShift(List<(DateTime StartDate, DateTime EndDate)> rollCalls, ICollection<CustomizeRotatingShift> rotatingShifts)
{
DateTime startDate = rollCalls.MinBy(x => x.StartDate).StartDate.Date;
DateTime endDate = rollCalls.MaxBy(x => x.EndDate).EndDate.Date;
var shiftDateTimes = rotatingShifts.SelectMany(shift =>
{
var shifts = new List<(DateTime Start, DateTime End)>();
for (int i = -1; i <= 1; i++)
{
var shiftStart = startDate.AddDays(i).Date;
shiftStart = shiftStart.Add(shift.StartTime.ToTimeSpan());
var shiftEnd = shift.StartTime < shift.EndTime
? startDate.AddDays(i).Date.Add(shift.EndTime.ToTimeSpan())
: startDate.AddDays(i + 1).Date.Add(shift.EndTime.ToTimeSpan());
shifts.Add((shiftStart, shiftEnd));
}
return shifts;
}).ToList();
//var shiftScores = shiftDateTimes
// .Select(shift =>
// {
// var totalOverlap = TimeSpan.Zero;
// var firstRollCall = rollCalls.MinBy(x => x.StartDate);
// var lastRollCall = rollCalls.MaxBy(x => x.EndDate);
// long totalStartDistance = Math.Abs((shift.Start - firstRollCall.StartDate).Ticks);
// long totalEndDistance = Math.Abs((shift.End - lastRollCall.EndDate).Ticks);
// foreach (var rollCall in rollCalls)
// {
// var start = rollCall.StartDate;
// var end = rollCall.EndDate;
// var overlapTicks = Math.Max(0,
// Math.Min(shift.End.Ticks, end.Ticks) -
// Math.Max(shift.Start.Ticks, start.Ticks));
// totalOverlap += new TimeSpan(overlapTicks);
// //totalStartDistance += Math.Abs((shift.Start - start).Ticks);
// //totalEndDistance += Math.Abs((shift.End - end).Ticks);
// }
// return new
// {
// Shift = shift,
// TotalOverlap = totalOverlap,
// TotalDistance = totalStartDistance + totalEndDistance,
// StartDistance = totalStartDistance,
// EndDistance = totalEndDistance
// };
// })
// .OrderBy(s => s.StartDistance)
// .ThenBy(s => s.TotalDistance)
// .ThenByDescending(s => s.TotalOverlap)
// .ThenBy(s => s.EndDistance);
// مرحله 1: گروه‌بندی بر اساس نزدیکی زمان شروع به اولین حضور و غیاب
var groupedByStart = shiftDateTimes
.GroupBy(shift =>
{
var firstRollCallStart = rollCalls.Min(x => x.StartDate);
var ticksDiff = Math.Abs((shift.Start - firstRollCallStart).Ticks);
return Math.Round(TimeSpan.FromTicks(ticksDiff).TotalMinutes / 30); // گروه‌بندی هر 30 دقیقه
})
.OrderBy(g => g.Key)
.First(); // نزدیک‌ترین گروه به شروع
// مرحله 2 (جایگزین مرحله ۴): گروه‌بندی بر اساس نزدیکی پایان شیفت به آخرین حضور و غیاب
var filteredByEnd = groupedByStart
.Select(shift =>
{
var lastRollCallEnd = rollCalls.Max(x => x.EndDate);
var endDistance = Math.Abs((shift.End - lastRollCallEnd).Ticks);
return new { Shift = shift, EndDistance = endDistance };
})
.GroupBy(x => x.EndDistance / TimeSpan.FromMinutes(30).Ticks) // گروه‌بندی هر 30 دقیقه
.OrderBy(g => g.Key)
.First() // نزدیک‌ترین پایان
.ToList();
// مرحله 3: فیلتر بر اساس بیشترین همپوشانی با حضور و غیاب‌ها
var filteredByOverlap = filteredByEnd
.Select(shift =>
{
var totalOverlap = TimeSpan.Zero;
foreach (var rollCall in rollCalls)
{
var overlapTicks = Math.Max(0,
Math.Min(shift.Shift.End.Ticks, rollCall.EndDate.Ticks) -
Math.Max(shift.Shift.Start.Ticks, rollCall.StartDate.Ticks));
totalOverlap += new TimeSpan(overlapTicks);
}
return new { Shift = shift.Shift, TotalOverlap = totalOverlap };
})
.GroupBy(x => Math.Round(x.TotalOverlap.TotalMinutes /5)) // گروه‌بندی همپوشانی
.OrderByDescending(g => g.Key) // بیشترین همپوشانی اول
.First()
.ToList();
// مرحله 4 (جایگزین مرحله ۲): فیلتر نهایی بر اساس کمترین مجموع فاصله (TotalDistance)
var bestShift = filteredByOverlap
.Select(shift =>
{
var firstRollCall = rollCalls.MinBy(x => x.StartDate);
var lastRollCall = rollCalls.MaxBy(x => x.EndDate);
var totalDistance =
Math.Abs((shift.Shift.Start - firstRollCall.StartDate).Ticks) +
Math.Abs((shift.Shift.End - lastRollCall.EndDate).Ticks);
return new { Shift = shift.Shift, TotalDistance = totalDistance };
})
.OrderBy(x => x.TotalDistance) // کمترین فاصله کلی
.First(); // بهترین شیفت نهایی
var overlapChosenShift = bestShift;
var end = overlapChosenShift.Shift.End;
if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start)
end = overlapChosenShift.Shift.End.AddDays(1);
return (overlapChosenShift.Shift.Start, end);
}
public BreakTime GetBreakTime(long employeeId, long workshopId)
{
var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId,
employeeId);
if (employeeSettings == null)
{
return new BreakTime(false, TimeOnly.MinValue);
}
return employeeSettings.BreakTime;
}
private DateTime CalculateRegularShiftDate(DateTime startDate, TimeOnly offset)
{
DateTime nextOffSetDateTime;

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Domain;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities;
using CompanyManagment.App.Contracts.Contract;
@@ -12,14 +13,26 @@ namespace Company.Domain.RollCallAgg;
public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
{
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout);
TimeSpan AfterSubtract(CreateWorkingHoursTemp command, TimeSpan sumOneDaySpan, DateTime creationDate);
List<RotatingShiftViewModel> RotatingShiftCheck(List<GroupedRollCalls> rollCallList);
List<RollCallViewModel> ConvertStaticHoursToRollCall(CreateWorkingHoursTemp command, bool workshopHolidyWorking);
CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd);
List<LateToWorkEarlyExistSpannig> LateToWorkEarlyExit(List<GroupedRollCalls> groupedRollCall,
ICollection<CustomizeWorkshopEmployeeSettingsShift> shiftSettings, List<LeaveViewModel> leavList);
/// <summary>
/// گزارش نوبت کاری حضور غیاب
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="contractStart"></param>
/// <param name="contractEnd"></param>
/// <param name="shiftwork"></param>
/// <returns></returns>
Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart,
DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command,bool holidayWorking);
}

View File

@@ -87,6 +87,9 @@ namespace Company.Domain.RollCallAgg
long workshopId);
Task<List<RollCall>> GetRollCallsInShiftDate(DateTime rollCallShiftDate, long employeeId, long workshopId);
Task<List<RollCall>> GetRollCallsUntilNowWithWorkshopIdEmployeeIds(long workshopId, List<long> employeeIds,
DateTime fromDate);
#endregion
}
}

View File

@@ -4,6 +4,8 @@ using System;
using Company.Domain.RollCallAgg.DomainService;
using System.Linq;
using _0_Framework.Exceptions;
using Company.Domain.EmployeeAgg;
using Company.Domain.WorkshopAgg;
namespace Company.Domain.RollCallAgg
{
@@ -34,10 +36,10 @@ namespace Company.Domain.RollCallAgg
{
throw new NotFoundException("اطلاعات گروهبندی شخص نامعتبر است");
}
SetBreakTime(service, employeeId, workshopId);
//if (endDate.HasValue)
//{
// Edit(StartDate.Value,endDate.Value,service);
// Edit(StartDate.Value,endDate.Value,service);
//}
}
@@ -198,30 +200,7 @@ namespace Company.Domain.RollCallAgg
/// <summary>
/// Truncates the TimeSpan to only include days, hours, and minutes.
/// Removes seconds, milliseconds, and smaller units.
/// </summary>
/// <param name="time">The original TimeSpan value.</param>
/// <returns>A truncated TimeSpan with only days, hours, and minutes.</returns>
private TimeSpan TruncateTimeSpan(TimeSpan time)
{
return new TimeSpan(time.Days, time.Hours, time.Minutes, 0);
}
/// <summary>
/// Truncates the DateTime to only include Years,Month,days,Hours and Minutes.
/// Removes seconds, milliseconds, and smaller units.
/// </summary>
/// <param name="dateTime">The original DateTime value.</param>
/// <returns>A truncated DateTime with only days, hours, and minutes.</returns>
private DateTime TruncateDateTime(DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour,
dateTime.Minute, 0);
}
public void SetEndDateTime(DateTime endDate, IRollCallDomainService service)
{
@@ -238,7 +217,7 @@ namespace Company.Domain.RollCallAgg
////محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
service.CalculateTimeDifferences(this);
SetBreakTime(service, EmployeeId, WorkshopId);
}
@@ -259,6 +238,8 @@ namespace Company.Domain.RollCallAgg
//محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
service.CalculateTimeDifferences(this);
SetBreakTime(service, EmployeeId, WorkshopId);
}
@@ -276,7 +257,7 @@ namespace Company.Domain.RollCallAgg
return this;
}
private void SetShiftDate(IRollCallDomainService service)
public void SetShiftDate(IRollCallDomainService service)
{
ShiftDate = service.GetEmployeeShiftDateByRollCallStartDate(WorkshopId, EmployeeId, StartDate!.Value,EndDate.Value);
}
@@ -331,6 +312,40 @@ namespace Company.Domain.RollCallAgg
}
}
private void SetBreakTime(IRollCallDomainService rollCallDomainService, long employeeId, long workshopId)
{
var breakTime = rollCallDomainService.GetBreakTime(employeeId, workshopId);
if (breakTime.BreakTimeType == BreakTimeType.WithTime)
BreakTimeSpan = breakTime.BreakTimeValue.ToTimeSpan();
}
/// <summary>
/// Truncates the TimeSpan to only include days, hours, and minutes.
/// Removes seconds, milliseconds, and smaller units.
/// </summary>
/// <param name="time">The original TimeSpan value.</param>
/// <returns>A truncated TimeSpan with only days, hours, and minutes.</returns>
private TimeSpan TruncateTimeSpan(TimeSpan time)
{
return new TimeSpan(time.Days, time.Hours, time.Minutes, 0);
}
/// <summary>
/// Truncates the DateTime to only include Years,Month,days,Hours and Minutes.
/// Removes seconds, milliseconds, and smaller units.
/// </summary>
/// <param name="dateTime">The original DateTime value.</param>
/// <returns>A truncated DateTime with only days, hours, and minutes.</returns>
private DateTime TruncateDateTime(DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour,
dateTime.Minute, 0);
}
//private static (DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts)
//{

View File

@@ -5,13 +5,13 @@ using Hangfire.Annotations;
namespace Company.Domain.SalaryAidAgg;
public class SalaryAid:EntityBase
public class SalaryAid : EntityBase
{
private SalaryAid()
{
}
public SalaryAid(long employeeId, long workshopId, double amount, DateTime salaryAidDateTime, long createdByAccountId, UserType createdByUserType)
public SalaryAid(long employeeId, long workshopId, double amount, DateTime salaryAidDateTime, long createdByAccountId, UserType createdByUserType, int calculationMonth, int calculationYear)
{
EmployeeId = employeeId;
WorkshopId = workshopId;
@@ -19,12 +19,26 @@ public class SalaryAid:EntityBase
SalaryAidDateTime = salaryAidDateTime;
CreatedByUserType = createdByUserType;
CreatedByAccountId = createdByAccountId;
CalculationDate = $"{calculationYear:0000}/{calculationMonth:00}/01".ToGeorgianDateTime();
CalculationMonth = calculationMonth;
CalculationYear = calculationYear;
}
public long EmployeeId { get; private set; }
public long WorkshopId { get; private set; }
public double Amount { get; private set; }
/// <summary>
/// تاریخ پرداخت
/// </summary>
public DateTime SalaryAidDateTime { get; private set; }
/// <summary>
/// تاریخ محاسبه
/// </summary>
public DateTime CalculationDate { get; private set; }
public int CalculationMonth { get; set; }
public int CalculationYear { get; set; }
public long CreatedByAccountId { get; private set; }
@@ -36,11 +50,14 @@ public class SalaryAid:EntityBase
public UserType LastModifiedByUserType { get; private set; }
public void Edit(double amount, DateTime salaryAidTime, long modifiedByAccountId, UserType modifiedByUserType)
public void Edit(double amount, DateTime salaryAidTime, long modifiedByAccountId, UserType modifiedByUserType, int calculationMonth, int calculationYear)
{
Amount = amount;
SalaryAidDateTime = salaryAidTime;
LastModifiedByAccountId = modifiedByAccountId;
LastModifiedByUserType = modifiedByUserType;
CalculationDate = $"{calculationYear:0000}/{calculationMonth:00}/01".ToGeorgianDateTime();
CalculationMonth = calculationMonth;
CalculationYear = calculationYear;
}
}

View File

@@ -14,5 +14,7 @@ public interface IWorkshopTempRepository : IRepository<long, WorkshopTemp>
/// <returns></returns>
Task<List<WorkshopTempViewModel>> GetWorkshopTemp(long contractingPartyTemp);
System.Threading.Tasks.Task RemoveWorkshopTemps(List<long> workshopTempIds);
}

View File

@@ -34,12 +34,14 @@ public class InstitutionContractTemp : EntityBase
/// بصورت یکجا
/// -
/// بصئورت ماهیانه
/// OneTime
/// </summary>
public string PaymentModel { get; private set; }
/// <summary>
/// مدت قرارداد
/// چند ماهه؟
/// "12"
/// </summary>
public string PeriodModel { get; private set; }

View File

@@ -90,7 +90,9 @@ public class Workshop : EntityBase
//}
public Workshop(string workshopName,string workshopSureName, string insuranceCode, string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking)
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide,
bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance)
{
WorkshopName = workshopName;
WorkshopSureName = workshopSureName;
@@ -132,6 +134,8 @@ public class Workshop : EntityBase
YearsOptions = yearsOptions;
HasRollCallFreeVip = hasRollCallFreeVip;
WorkshopHolidayWorking = workshopHolidayWorking;
InsuranceCheckoutOvertime = insuranceCheckoutOvertime;
InsuranceCheckoutFamilyAllowance = insuranceCheckoutFamilyAllowance;
}
@@ -198,6 +202,14 @@ public class Workshop : EntityBase
//کارگاه هایی که در تعطیلات رسمی باز هستند
public bool WorkshopHolidayWorking { get; private set; }
/// <summary>
/// محاسبه اضافه کار فیش حقوقی در لیست بیمه
/// </summary>
public bool InsuranceCheckoutOvertime { get; private set; }
/// <summary>
/// محاسبه حق اولاد در لیست بیمه
/// </summary>
public bool InsuranceCheckoutFamilyAllowance { get; private set; }
//public Employer Employer { get; private set; }
public Workshop()
@@ -229,7 +241,9 @@ public class Workshop : EntityBase
public void Edit(string workshopName, string workshopSureName, string insuranceCode,string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
string agreementNumber, bool fixedSalary, string population, long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay,bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking)
string agreementNumber, bool fixedSalary, string population, long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay,
bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance)
{
WorkshopName = workshopName;
WorkshopSureName = workshopSureName;
@@ -268,7 +282,9 @@ public class Workshop : EntityBase
YearsOptions = yearsOptions;
HasRollCallFreeVip = hasRollCallFreeVip;
WorkshopHolidayWorking = workshopHolidayWorking;
}
InsuranceCheckoutOvertime = insuranceCheckoutOvertime;
InsuranceCheckoutFamilyAllowance = insuranceCheckoutFamilyAllowance;
}
public void Active(string archiveCode)

View File

@@ -17,7 +17,7 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
void TestDayliFeeCompute();
List<string> GetYears();
List<YearlySalaryViewModel> GetYearlySalary();
MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking);
MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking,string shiftWork);
double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, double housingAllowance, double familyAllowance , string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM);
double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM);
double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM);

View File

@@ -0,0 +1,179 @@
using CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
using OfficeOpenXml.Style;
using OfficeOpenXml;
using System.Drawing;
using _0_Framework.Application;
namespace CompanyManagement.Infrastructure.Excel.CWS;
public class CustomizeWorkshopGroupExcelViewModel
{
public string Name { get; set; }
public string ShiftType { get; set; }
public string Shifts { get; set; }
public string Salary { get; set; }
public List<CustomizeWorkshopEmployeeExcelViewModel> EmployeeSettings { get; set; }
}
public class CustomizeWorkshopEmployeeExcelViewModel
{
public string Name { get; set; }
public string ShiftType { get; set; }
public string Shifts { get; set; }
public int LeavePermitted { get; set; }
public string Salary { get; set; }
}
public class CustomizeWorkshopGroupSettingExcelGenerator
{
public static byte[] Generate(List<CustomizeWorkshopGroupExcelViewModel> groups)
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("GroupsAndEmployees");
// Headers
worksheet.Cells[1, 1].Value = "نام گروه";
worksheet.Cells[1, 2].Value = "نوع شیفت گروه";
worksheet.Cells[1, 3].Value = "شیفت گروه";
worksheet.Cells[1, 4].Value = "حقوق گروه";
worksheet.Cells[1, 5].Value = "نام پرسنل";
worksheet.Cells[1, 6].Value = "مجاز مرخصی پرسنل";
worksheet.Cells[1, 7].Value = "نوع شیفت پرسنل";
worksheet.Cells[1, 8].Value = "شیفت پرسنل";
worksheet.Cells[1, 9].Value = "حقوق پرسنل";
using (var range = worksheet.Cells[1, 1, 1, 9])
{
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
range.Style.Font.Bold = true;
range.Style.Fill.PatternType = ExcelFillStyle.Solid;
range.Style.Fill.BackgroundColor.SetColor(Color.LightGray); // رنگ پس زمینه خاکستری
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
}
int row = 2;
foreach (var group in groups)
{
var employees = group.EmployeeSettings ?? new List<CustomizeWorkshopEmployeeExcelViewModel>();
int groupStartRow = row;
int groupEndRow = employees.Count > 0 ? (row + employees.Count - 1) : row;
if (employees.Count == 0)
{
// گروه بدون پرسنل
worksheet.Cells[row, 1].Value = group.Name;
worksheet.Cells[row, 2].Value = group.ShiftType;
worksheet.Cells[row, 3].Value = group.Shifts;
worksheet.Cells[row, 4].Value = Convert.ToInt32(group.Salary);
ApplyGroupStyle(worksheet, row, row);
worksheet.Cells[row, 4].Style.Numberformat.Format = "#,##0";
using (var thickBorderRange = worksheet.Cells[groupEndRow, 1, groupEndRow, 9])
{
thickBorderRange.Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
}
row++;
}
else
{
foreach (var employee in employees)
{
worksheet.Cells[row, 5].Value = employee.Name;
worksheet.Cells[row, 6].Value = employee.LeavePermitted;
worksheet.Cells[row, 7].Value = employee.ShiftType;
worksheet.Cells[row, 8].Value = employee.Shifts;
worksheet.Cells[row, 9].Value = Convert.ToInt32(employee.Salary);
ApplyEmployeeStyle(worksheet, row);
worksheet.Cells[row, 9].Style.Numberformat.Format = "#,##0";
row++;
}
// Merge اطلاعات گروه برای تمام پرسنل
worksheet.Cells[groupStartRow, 1, groupEndRow, 1].Merge = true;
worksheet.Cells[groupStartRow, 1].Value = group.Name;
worksheet.Cells[groupStartRow, 2, groupEndRow, 2].Merge = true;
worksheet.Cells[groupStartRow, 2].Value = group.ShiftType;
worksheet.Cells[groupStartRow, 3, groupEndRow, 3].Merge = true;
worksheet.Cells[groupStartRow, 3].Value = group.Shifts;
worksheet.Cells[groupStartRow, 4, groupEndRow, 4].Merge = true;
worksheet.Cells[groupStartRow, 4].Value = Convert.ToInt32(group.Salary);
ApplyGroupStyle(worksheet, groupStartRow, groupEndRow);
worksheet.Cells[groupStartRow, 4, groupEndRow, 4].Style.Numberformat.Format = "#,##0";
worksheet.Cells[groupEndRow, 1, groupEndRow, 9].Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
}
}
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
for (int i = 2; i <= worksheet.Dimension.Rows; i++)
{
worksheet.Row(i).Height = 50;
}
int groupShiftCol = 3;
int employeeShiftCol = 8;
int groupSalary = 4;
int employeeSalary = 9;
int employeeName =5;
worksheet.Columns[groupShiftCol].Width = 15;
worksheet.Columns[employeeShiftCol].Width = 15;
worksheet.Columns[groupSalary].Width = 16;
worksheet.Columns[employeeSalary].Width = 16;
worksheet.Columns[employeeName].Width = 24;
worksheet.View.RightToLeft = true; // فارسی
return package.GetAsByteArray();
}
}
private static void ApplyEmployeeStyle(ExcelWorksheet worksheet, int row)
{
using (var range = worksheet.Cells[row, 5, row, 9])
{
//range.Style.Fill.PatternType = ExcelFillStyle.Solid;
//range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(198, 239, 206)); // سبز خیلی روشن
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
// اضافه کردن بوردر به همه‌ی سلول‌های ردیف پرسنل
range.Style.Border.Top.Style = ExcelBorderStyle.Thin;
range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
range.Style.Border.Left.Style = ExcelBorderStyle.Thin;
range.Style.Border.Right.Style = ExcelBorderStyle.Thin;
range.Style.WrapText = true;
}
}
private static void ApplyGroupStyle(ExcelWorksheet worksheet, int startRow, int endRow)
{
using (var range = worksheet.Cells[startRow, 1, endRow, 4])
{
//range.Style.Fill.PatternType = ExcelFillStyle.Solid;
//range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(255, 255, 204)); // زرد خیلی روشن
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
// اضافه کردن بوردر به همه‌ی سلول‌های گروه
range.Style.Border.Top.Style = ExcelBorderStyle.Thin;
range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
range.Style.Border.Left.Style = ExcelBorderStyle.Thin;
range.Style.Border.Right.Style = ExcelBorderStyle.Thin;
range.Style.WrapText = true;
}
}
}

View File

@@ -26,7 +26,17 @@ public class CaseManagementExcelGenerator
{
OfficeOpenXml.ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using var package = new ExcelPackage();
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
CreateSheet(data, package,"همه");
CreateSheet(data.Where(x=>x.Status ==2).ToList(), package,"فعال");
CreateSheet(data.Where(x=>x.Status == 1).ToList(), package,"غیرفعال");
CreateSheet(data.Where(x=>x.Status == 3).ToList(), package,"خروج موقت");
return package.GetAsByteArray();
}
private static void CreateSheet(List<FileExcelViewModel> data, ExcelPackage package,string sheetName)
{
var worksheet = package.Workbook.Worksheets.Add(sheetName);
var indexCell = worksheet.Cells[1, 1];
indexCell.Value = "ردیف";
@@ -85,7 +95,6 @@ public class CaseManagementExcelGenerator
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
worksheet.View.RightToLeft = true;
return package.GetAsByteArray();
}
private static bool RequiresMoneyToDouble(string propertyName)

View File

@@ -6,7 +6,7 @@ using LicenseContext = OfficeOpenXml.LicenseContext;
namespace CompanyManagement.Infrastructure.Excel.SalaryAid;
public record SalaryAidImportData(long EmployeeId, long WorkshopId, string FullName, double Amount, string AccountNumber, string NationalCode, string SalaryAidDateTime, int Row, bool Duplicated);
public record SalaryAidImportData(long EmployeeId, long WorkshopId, string FullName, double Amount, string AccountNumber, string NationalCode, string SalaryAidDateTime, int calculationMonth, int calculationYear, int Row, bool Duplicated);
public class ExcelValidation<T>
{
@@ -80,35 +80,59 @@ public class SalaryAidImportExcel
// بررسی اینکه هدرها همان چیزی هستند که ما انتظار داریم
if (worksheet.Cells[2, 1].Text != "نام و نام خانوادگی" ||
worksheet.Cells[2, 2].Text != "کد ملی" ||
worksheet.Cells[2, 3].Text != "شماره حساب" ||
worksheet.Cells[2, 4].Text != "مبلغ قابل پرداخت" ||
worksheet.Cells[1, 1].Text != "تاریخ پرداخت")
if (worksheet.Cells[3, 1].Text != "نام و نام خانوادگی" ||
worksheet.Cells[3, 2].Text != "کد ملی" ||
worksheet.Cells[3, 3].Text != "شماره حساب" ||
worksheet.Cells[3, 4].Text != "مبلغ قابل پرداخت" ||
worksheet.Cells[1, 3].Text != "تاریخ پرداخت" ||
worksheet.Cells[1, 1].Text != "سال محاسبه" ||
worksheet.Cells[1, 2].Text != "ماه محاسبه")
{
result.Errors.Add(new SalaryAidImportExcelError("ساختار فایل اکسل اشتباه است.", 0, SalaryAidExcelColumns.None.ToString()));
return result;
}
var salaryDateFa = worksheet.Cells[1, 4].Text;
var salaryDateFa = worksheet.Cells[2, 3].Text;
var calculationMonth = Convert.ToInt32(string.IsNullOrWhiteSpace(worksheet.Cells[2, 2].Text) ? "0" : worksheet.Cells[2, 2].Text);
var calculationYear = Convert.ToInt32(string.IsNullOrWhiteSpace(worksheet.Cells[2, 1].Text) ? "0" : worksheet.Cells[2, 1].Text);
if (string.IsNullOrWhiteSpace(salaryDateFa))
{
result.Errors.Add(new SalaryAidImportExcelError("لطفا در سلول زرد رنگ تاریخ پرداخت را وارد کنید", 0, SalaryAidExcelColumns.None.ToString()));
return result;
}
if (calculationMonth == 0)
{
result.Errors.Add(new SalaryAidImportExcelError("لطفا در سلول آبی رنگ ماه محاسبه را وارد کنید", 0, SalaryAidExcelColumns.None.ToString()));
return result;
}
if (calculationYear == 0)
{
result.Errors.Add(new SalaryAidImportExcelError("لطفا در سلول آبی رنگ سال محاسبه را وارد کنید", 0, SalaryAidExcelColumns.None.ToString()));
return result;
}
var calculationDate = $"{calculationYear:0000}/{calculationMonth:00}/01";
if (salaryDateFa.TryToGeorgianDateTime(out var salaryDateTime) == false)
{
result.Errors.Add(new SalaryAidImportExcelError("تاریخ وارد شده نامعتبر است", 0, SalaryAidExcelColumns.None.ToString()));
}
if (calculationDate.TryToGeorgianDateTime(out var calculationDateTime) == false)
{
result.Errors.Add(new SalaryAidImportExcelError("تاریخ محاسبه وارد شده نامعتبر است", 0, SalaryAidExcelColumns.None.ToString()));
}
if (salaryDateTime > DateTime.Now)
{
result.Errors.Add(new SalaryAidImportExcelError("تاریخ پرداخت مساعده می بایست تاریخ امروز یا قبل تر باشد", 0, SalaryAidExcelColumns.None.ToString()));
}
int rowCount = worksheet.Dimension.Rows;
int rowStart = 3;
int rowStart = 4;
if (rowCount < rowStart)
{
@@ -127,11 +151,11 @@ public class SalaryAidImportExcel
if (!double.TryParse(amountText, out double amount) || amount <= 0)
{
result.Errors.Add(new SalaryAidImportExcelError("مبلغ خالی یا نامعتبر است", row, SalaryAidExcelColumns.Amount.ToString()));
}
result.RawData.Add(new SalaryAidImportData(0, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, row, false));
if (string.IsNullOrWhiteSpace(fullName))
}
result.RawData.Add(new SalaryAidImportData(0, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, calculationMonth, calculationYear, row, false));
if (string.IsNullOrWhiteSpace(fullName))
{
result.Errors.Add(new SalaryAidImportExcelError(" نام و نام خانوادگی خالی است", row, SalaryAidExcelColumns.FullName.ToString()));
@@ -204,25 +228,61 @@ public class SalaryAidImportExcel
var year = Convert.ToInt32(salaryDateFa.Substring(0, 4));
if (_companyContext.CustomizeCheckouts.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employee.id && x.YearInt == year && x.MonthInt == month))
//if (_companyContext.CustomizeCheckouts.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employee.id && x.YearInt == year && x.MonthInt == month))
//{
// result.Errors.Add(new SalaryAidImportExcelError($" پرسنل {fullName} در تاریخ {salaryDateFa} دارای فیش حقوقی غیررسمی است.", row, SalaryAidExcelColumns.None.ToString()));
//}
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > calculationDateTime)
{
result.Errors.Add(new SalaryAidImportExcelError($" پرسنل {fullName} در تاریخ {salaryDateFa} دارای فیش حقوقی غیررسمی است.", row, SalaryAidExcelColumns.None.ToString()));
bool customizeCheckout = false;
bool customizeCheckoutTemp = false;
bool checkout = false;
if (_companyContext.CustomizeCheckouts.Any(x => x.WorkshopId == workshopId && employee.id == x.EmployeeId &&
x.ContractStart <= oneMonthAgoGr && x.ContractEnd >= calculationDateTime))
{
customizeCheckout = true;
}
if (_companyContext.CustomizeCheckoutTemps.Any(x => x.WorkshopId == workshopId && employee.id == x.EmployeeId &&
x.ContractStart <= calculationDateTime && x.ContractEnd >= oneMonthAgoGr))
{
customizeCheckoutTemp = true;
}
if (_companyContext.CheckoutSet.Any(x => x.WorkshopId == workshopId && employee.id == x.EmployeeId &&
x.ContractStart <= calculationDateTime && x.ContractEnd >= oneMonthAgoGr))
{
checkout = true;
}
if (customizeCheckout || customizeCheckoutTemp)
{
result.Errors.Add(new SalaryAidImportExcelError($"شما نمیتوانید به پرسنل {fullName} در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد مساعده دهید", row, SalaryAidExcelColumns.None.ToString()));
}
}
//if(_companyContext.CheckoutSet.Any(x => x.WorkshopId == workshopId && employee.id == x.EmployeeId &&
// x.ContractStart <= calculationDateTime && x.ContractEnd >= calculationDateTime))
// result.Errors.Add(new SalaryAidImportExcelError($"پرسنل {fullName} در تاریخ {calculationDate} دارای فیش رسمی میباشد", row, SalaryAidExcelColumns.None.ToString()));
if (_companyContext.SalaryAids.Any(x => x.Amount == amount && x.EmployeeId == employee.id && x.WorkshopId == workshopId && x.SalaryAidDateTime == salaryDateTime))
{
// TODO MAHAN: Vafa Add this Code! Please Check it!
result.RawData.Add(new SalaryAidImportData(employee.id, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, row, true));
continue;
result.RawData.Add(new SalaryAidImportData(employee.id, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, calculationMonth, calculationYear, row, true));
continue;
}
result.ValidData.Add(new SalaryAidImportData(employee.id, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, row, false));
result.ValidData.Add(new SalaryAidImportData(employee.id, workshopId, fullName, amount, accountNumber, nationalCode, salaryDateFa, calculationMonth, calculationYear, row, false));
}
result.RawData = result.RawData.GroupBy(x => x.Row).Select(x => new SalaryAidImportData(x.First().EmployeeId,
x.First().WorkshopId, x.First().FullName,
x.First().Amount, x.First().AccountNumber, x.First().NationalCode, x.First().SalaryAidDateTime, x.Key,
x.Any(s => s.Duplicated))).ToList();
result.RawData = result.RawData.GroupBy(x => x.Row).Select(x => new SalaryAidImportData(x.Last().EmployeeId,
x.First().WorkshopId, x.First().FullName,
x.First().Amount, x.First().AccountNumber, x.First().NationalCode, x.First().SalaryAidDateTime, x.First().calculationMonth, x.First().calculationYear, x.Key,
x.Any(s => s.Duplicated))).ToList();
//result.Errors.GroupBy(x => x.Row).Select(x => new

View File

@@ -136,4 +136,6 @@ public class CreateCheckout
public bool HolidayWorking { get; set; }
public string ShiftWork { get; set; }
}

View File

@@ -0,0 +1,18 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.ContactUs;
public interface IContactUsApplication
{
OperationResult Create(CreateContactUs command);
}
public class CreateContactUs
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string Title { get; set; }
public string Message { get; set; }
}

View File

@@ -36,7 +36,12 @@ public class ComputingViewModel
public string MarriedAllowance { get; set; }
public string RotatingShiftValue { get; set; }
public List<RotatingShiftViewModel> RotatingResultList { get; set; }
public bool HasRollCall { get; set; }
public string EmployeeFullName { get; set; }
public string YearAndMonth { get; set; }
public bool HasRotatingShift { get; set; }
//public List<string> holidays;

View File

@@ -1,5 +1,6 @@
using System;
using _0_Framework.Application;
using System.Collections.Generic;
@@ -17,5 +18,9 @@ namespace CompanyManagment.App.Contracts.CustomizeCheckout
OperationResult GroupRemove(long workshopId,List<long> idList);
OperationResult Create(CreateCustomizeCheckout command);
}
(bool Checkout, bool CustomizeCheckout, bool CustomizeCheckoutTemp) ValidateExistsCheckouts(
DateTime startDate, DateTime endDate, long workshopId, List<long> employeeId);
}
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
namespace CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
@@ -9,4 +10,6 @@ public class CustomizeWorkshopSettingsViewModel
public string Name { get; set; }
public WorkshopShiftStatus WorkshopShiftStatus { get; set; }
public List<CustomizeWorkshopGroupSettingsViewModel> GroupSettings { get; set; }
public TimeOnly Offset { get; set; }
}

View File

@@ -2,8 +2,10 @@
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.RollCall;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
@@ -34,7 +36,8 @@ public interface ICustomizeWorkshopSettingsApplication
OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command);
#region Vafa
OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command);
OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
List<ReCalculateRollCallValues> reCalculateCommand);
#endregion
OperationResult RemoveGroupSettings(long employeeSettingsId);
@@ -89,4 +92,10 @@ public interface ICustomizeWorkshopSettingsApplication
bool HasAnyEmployeeWithoutGroup(long workshopId);
/// <summary>
/// این متد چک میکند که آیا شیفت پرسنل تغییر کرده است یا نه
/// </summary>
/// <returns></returns>
bool CheckEmployeeShiftHasChanged(EditCustomizeEmployeeSettings command);
}

View File

@@ -94,4 +94,14 @@ public class CreateEmployee
public long WorkshopId { get; set; }
public long? PersonelCode { get; set; }
public bool IsAuthorized { get; set; }
/// <summary>
/// سریال شناسنامه
/// </summary>
public string IdNumberSerial { get; set; }
/// <summary>
/// سری شناسنامه
/// </summary>
public string IdNumberSeri { get; set; }
}

View File

@@ -0,0 +1,29 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Employee;
public class EmployeeDataFromApiViewModel
{
public Gender Gender { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string FatherName { get; set; }
public string BirthDate { get; set; }
/// <summary>
/// کدملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شماره شناسنامه
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// سریال شناسنامه
/// </summary>
public string IdNumberSerial { get; set; }
/// <summary>
/// سری شناسنامه
/// </summary>
public string IdNumberSeri { get; set; }
}

View File

@@ -1,4 +1,6 @@
namespace CompanyManagment.App.Contracts.Employee;
using AccountManagement.Application.Contracts.Media;
namespace CompanyManagment.App.Contracts.Employee;
public class GetEditEmployeeInEmployeeDocumentViewModel
{
@@ -14,4 +16,5 @@ public class GetEditEmployeeInEmployeeDocumentViewModel
public string Nationality { get; set; } = string.Empty;
public string Gender { get; set; } = string.Empty;
public bool IsAuthorized { get; set; }
public MediaViewModel Media { get; set; }
}

View File

@@ -75,6 +75,8 @@ public interface IEmployeeApplication
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate);
#endregion
}

View File

@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.EmployeeClientTemp;
@@ -8,7 +10,19 @@ public interface IEmployeeClientTempApplication
OperationResult Create(CreateEmployeeClientTemp command);
EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
Task<List<EmployeeClientTempViewModel>> GetByEmployeeId(long employeeId);
}
public class EmployeeClientTempViewModel
{
public string EmployeeFullName { get; set; }
public long WorkshopId { get; set; }
public long EmployeeId { get; set; }
public DateTime StartWorkDate { get; set; }
public string MaritalStatus { get; set; }
}
public class EmployeeClientTempGetDetailsViewModel

View File

@@ -12,6 +12,7 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
public long WorkshopId { get; set; }
public IFormFile PictureFile { get; set; }
public DocumentItemLabel Label { get; set; }
}
public bool WithoutPicture { get; set; }
}
}

View File

@@ -59,6 +59,77 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
/// </summary>
OperationResult AddRangeEmployeeDocumentItemsByAdmin(long workshopId, long employeeId,
List<AddEmployeeDocumentItem> command);
#region Mahan
/// <summary>
/// کارگاهی که افزودن پرسنل کرده اند. بر اساس نقش فیلتر میشوند
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentCreatedEmployeeForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// مدارک های برگشت خورده براساس دسترسی افراد و نقششان. یک مدرک برگشت خورده به تمامی کسانی که به آن کارگاه دسترسی دارند و تمامی کسانی که هم نقش آپلود کننده بوده اند نمایش داده میشود
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentRejectedForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// مدارک های برگشت خورده براساس دسترسی افراد و نقششان. یک مدرک برگشت خورده به تمامی کسانی که به آن کارگاه دسترسی دارند و تمامی کسانی که هم نقش آپلود کننده بوده اند نمایش داده میشود
/// </summary>
/// <param name="workshopId"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetRejectedItemsByWorkshopIdAndRoleForAdminWorkFlow(long workshopId,
long roleId);
/// <summary>
/// کارگاه هایی که افزودن پرسنل کرده اند و مدارک آنها ناقص است
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetCreatedEmployeesWorkshopDocumentForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// پرسنلی که افزوده شده اند در کارگاه و آپلود مدارک آنها ناقص است
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetCreatedEmployeesDocumentByWorkshopIdForAdmin(long workshopId);
/// <summary>
/// لیست کارگاه هایی که مدارک آپلود شده توسط کلاینت برگشت خورده است در کارپوشه ادمین
/// </summary>
/// <param name="workshops"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetClientRejectedDocumentWorkshopsForAdmin(
List<long> workshops, long roleId);
/// <summary>
/// مدارک های آپلود شده توسط کلاینت در کارگاه که برگشت خورده اند در کارپوشه ادمین
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentByWorkshopIdForAdmin(long workshopId);
/// <summary>
/// مدارک های برگشت خورده برای کلاینت
/// </summary>
/// <param name="workshopId"></param>
/// <param name="accountId"></param>
/// <returns></returns>
Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentForClient(long workshopId, long accountId);
#endregion
EmployeeDocumentItemViewModel GetOneDocumentItemDetailsForAdmin(long employeeId, long workshopId,long documentItemId);
}
}

View File

@@ -90,4 +90,14 @@ public class CreateEmployeeInsurancListData
/// DSW_SPOUSE
/// </summary>
public double MarriedAllowance { get; set; }
/// <summary>
/// اضافه کار فیش حقوقی
/// </summary>
public double OverTimePay { get; set; }
/// <summary>
/// حق اولاد فیش حقوقی
/// </summary>
public double FamilyAllowance { get; set; }
}

View File

@@ -50,7 +50,7 @@ public class EmployeeInsurancListDataViewModel
/// </summary>
public double BenefitsIncludedNonContinuous { get; set; }
/// <summary>
/// جمع کل دستمزد و مزایای ماهانه
/// جمع کل دستمزد و مزایای ماهانه مشمول و غیر مشمول
/// DSW_TOTL
/// </summary>
public double IncludedAndNotIncluded { get; set; }
@@ -119,5 +119,15 @@ public class EmployeeInsurancListDataViewModel
/// </summary>
public double MarriedAllowance { get; set; }
/// <summary>
/// اضافه کار فیش حقوقی
/// </summary>
public double OverTimePay { get; set; }
/// <summary>
/// حق اولاد فیش حقوقی
/// </summary>
public double FamilyAllowance { get; set; }
}

View File

@@ -253,21 +253,49 @@ public class EmployeeDetailsForInsuranceListViewModel
/// DSW_SPOUSE
/// </summary>
public double MarriedAllowance { get; set; }
///// <summary>
///// مجموع پایه سنواتی کارکنان
///// DSK_INC
///// </summary>
//public double SumOfBaseYears { get; set; }
///// <summary>
///// جمع پایه سنوات و دستمزد روزانه کارکنان
///// DSW_INC
///// </summary>
//public double SumOfDailyWagePlusBaseYears { get; set; }
/// <summary>
/// آیا پرسنل دارای فیش حقوقی برای این ماه است
/// -
/// جهت محاسبه اضافه کار و حق اولاد
/// </summary>
public bool EmployeeHasCheckout { get; set; }
///// <summary>
///// مجموع حق تاهل کارکنان
///// DSK_SPOUSE
///// </summary>
//public double SumOfMarriedAllowance { get; set; }
/// <summary>
/// اضافه کار فیش حقوقی
/// </summary>
public double OverTimePay { get; set; }
/// <summary>
/// حق اولاد فیش حقوقی
/// </summary>
public double FamilyAllowance { get; set; }
/// <summary>
/// محاسبه اضافه کار
/// </summary>
public bool OverTimeIsSet { get; set; }
/// <summary>
///محاسبه حق اولاد
/// </summary>
public bool FamilyAllowanceIsSet { get; set; }
///// <summary>
///// مجموع پایه سنواتی کارکنان
///// DSK_INC
///// </summary>
//public double SumOfBaseYears { get; set; }
///// <summary>
///// جمع پایه سنوات و دستمزد روزانه کارکنان
///// DSW_INC
///// </summary>
//public double SumOfDailyWagePlusBaseYears { get; set; }
///// <summary>
///// مجموع حق تاهل کارکنان
///// DSK_SPOUSE
///// </summary>
//public double SumOfMarriedAllowance { get; set; }
}

View File

@@ -28,4 +28,13 @@ public class CreateInsuranceWorkshopInfo
public long? InsuranceJobId { get; set; }
//public bool ConfirmSentlist { get; set; }
/// <summary>
/// محاسبه اضافه کار فیش حقوقی در لیست بیمه
/// </summary>
public bool InsuranceCheckoutOvertime { get; set; }
/// <summary>
/// محاسبه حق اولاد در لیست بیمه
/// </summary>
public bool InsuranceCheckoutFamilyAllowance { get; set; }
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.LeftWork;
@@ -30,6 +31,23 @@ public interface ILeftWorkTempApplication
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> AcceptLeftWork(AcceptLeftWorkTemp command);
Task<List<LeftWorkTempViewModel>> GetLeftWorkTempsByEmployeeId(long employeeId);
List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId);
}
public class LeftWorkTempViewModel
{
public long LeftWorkId { get; set; }
public DateTime StartWork { get; set; }
public DateTime LeftWork { get; set; }
public DateTime LastDayStanding { get; set; }
public long WorkshopId { get; set; }
public long EmployeeId { get; set; }
public long JobId { get; set; }
public LeftWorkTempType LeftWorkType { get; set; }
}
public class AcceptLeftWorkTemp

View File

@@ -6,7 +6,8 @@ namespace CompanyManagment.App.Contracts.Loan;
public class LoanInstallmentViewModel
{
public string Year { get; set; }
public long Id { get; set; }
public string Year { get; set; }
public string Month { get; set; }
public string Amount { get; set; }
public double AmountDouble { get; set; }

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Reward;
@@ -6,7 +7,7 @@ namespace CompanyManagment.App.Contracts.Reward;
public interface IRewardApplication
{
OperationResult Create(CreateRewardViewModel command);
OperationResult Edit(EditRewardViewModel command);
OperationResult Edit(EditRewardViewModel command);
List<RewardViewModel> GetSearchList(RewardSearchModel searchViewModel);
EditRewardViewModel GetDetails(long id);
OperationResult Remove(long id);

View File

@@ -42,6 +42,9 @@ namespace CompanyManagment.App.Contracts.RollCall
DateTime end);
List<RollCallsByDateViewModel> GetUndefinedRollCallWorkFlowsService(long workshopId, DateTime durationStart, DateTime durationEnd);
OperationResult RemoveEmployeeRollCallsInDate(long workshopId, long employeeId, string dateFa);
@@ -114,5 +117,18 @@ namespace CompanyManagment.App.Contracts.RollCall
OperationResult SetModifyTypeToEditByEmployerForRollCallsInDate(long workshopId, long employeeId, string absenceDate);
List<RollCallViewModel> GetWorkshopEmployeeRollCallsWithUndefinedForDate(long workshopId, long employeeId, string date);
}
/// <summary>
/// محاسبه مجدد مقادیر حضور غیاب
/// </summary>
/// <param name="workshopId"></param>
/// <param name="command"></param>
/// <returns></returns>
OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
}
public class ReCalculateRollCallValues
{
public long EmployeeId { get; set; }
public string FromDate { get; set; }
}
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.WorkingHoursTemp;
@@ -7,5 +8,17 @@ namespace CompanyManagment.App.Contracts.RollCall;
public interface IRollCallMandatoryApplication
{
bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout);
/// <summary>
/// گزارش نوبت کاری حضور غیاب
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="contractStart"></param>
/// <param name="contractEnd"></param>
/// <param name="shiftwork"></param>
/// <returns></returns>
Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart,
DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command, bool holidayWorking);
}

View File

@@ -61,4 +61,8 @@ public class RollCallViewModel
/// مقدار تایم شیفت (مدت زمان شیفت کاری)
/// </summary>
public TimeSpan ShiftDurationTimeSpan { get; set; }
/// <summary>
/// مدت زمان استراحت
/// </summary>
public TimeSpan BreakTimeSpan { get; set; }
}

View File

@@ -9,4 +9,6 @@ public class CreateSalaryAidViewModel
public string Amount { get; set; }
public string SalaryDateTime { get; set; }
public string NationalCode { get; set; }
}
public int CalculationMonth { get; set; }
public int CalculationYear { get; set; }
}

View File

@@ -22,5 +22,5 @@ public interface ISalaryAidApplication
SalaryAidsGroupedViewModel GetSearchListAsGrouped(SalaryAidSearchViewModel searchModel);
#endregion
Task<OperationResult> CreateRange(List<CreateSalaryAidViewModel> commands);
OperationResult CreateRange(List<CreateSalaryAidViewModel> commands);
}

View File

@@ -4,17 +4,21 @@ namespace CompanyManagment.App.Contracts.SalaryAid;
public class SalaryAidViewModel
{
public long Id { get; set; }
public long EmployeeId { get; set; }
public string Amount { get; set; }
public long Id { get; set; }
public long EmployeeId { get; set; }
public string Amount { get; set; }
public double AmountDouble { get; set; }
public long WorkshopId { get; set; }
public string CreationDate { get; set; }
public string SalaryAidDateTimeFa { get; set; }
public DateTime SalaryAidDateTimeGe { get; set; }
public long WorkshopId { get; set; }
public string CreationDate { get; set; }
public string SalaryAidDateTimeFa { get; set; }
public DateTime SalaryAidDateTimeGe { get; set; }
public string CalculationDateTimeFa { get; set; }
public DateTime CalculationDateTimeGe { get; set; }
public string EmployeeFullName { get; set; }
public string PersonnelCode { get; set; }
public string EmployeeFullName { get; set; }
public string PersonnelCode { get; set; }
public string MonthFa { get; set; }
public string YearFa { get; set; }
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.InstitutionPlan;
@@ -38,7 +39,7 @@ public interface ITemporaryClientRegistrationApplication
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateOrUpdateWorkshopTemp(List<WorkshopTempViewModel> command);
Task<OperationResult> CreateOrUpdateWorkshopTemp(List<WorkshopTempViewModel> command, long contractingPartyTempId);
/// <summary>
/// دریافت جمع کل خدمات برای یک کارگاه
@@ -55,14 +56,14 @@ public interface ITemporaryClientRegistrationApplication
/// <param name="paymentModel"></param>
/// <returns></returns>
Task<ReviewAndPaymentViewModel> GetTotalPaymentAndWorkshopList(long contractingPartyTempId,
string periodModel = "12", string paymentModel = "OneTime");
string periodModel = "12", string paymentModel = "OneTime", string contractStartType = "currentMonth");
/// <summary>
/// ایجاد یا ویرایش قرارداد موقت
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax);
Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax, DateTime contractStart);
/// <summary>
/// دریافت کد برای کلاینت

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.TemporaryClientRegistration;
public class MonthlyInstallment
{
/// <summary>
/// مبلغ قسط ماهانه
/// </summary>
public string InstallmentAmountStr { get; set; }
/// <summary>
/// تاریخ قسط ماهانه
/// </summary>
public string InstalmentDate { get; set; }
/// <summary>
/// شمارنده قسط
/// </summary>
public string InstallmentCounter{ get; set; }
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.TemporaryClientRegistration;
@@ -23,28 +24,54 @@ public class ReviewAndPaymentViewModel
/// مبلغ پرداخت بدون مالیات
/// Double
/// </summary>
public double WithoutTaxPaymentDouble { get; set; }
public double OneTimeWithoutTaxPaymentDouble { get; set; }
/// <summary>
/// مبلغ پرداخت بدون مالیات
/// string
/// </summary>
public string WithoutTaxPaymentStr { get; set; }
public string OneTimeWithoutTaxPaymentStr { get; set; }
/// <summary>
/// مبلغ پرداخت کامل
/// Double
/// </summary>
public double TotalPaymentDouble { get; set; }
public double OneTimeTotalPaymentDouble { get; set; }
/// <summary>
/// مبلغ پرداخت کامل
/// string
/// </summary>
public string TotalPaymentStr { get; set; }
public string OneTimeTotalPaymentStr { get; set; }
/// <summary>
/// مبلغ پرداخت بدون مالیات
/// Double
/// </summary>
public double MonthlyWithoutTaxPaymentDouble { get; set; }
/// <summary>
/// مبلغ پرداخت بدون مالیات
/// string
/// </summary>
public string MonthlyWithoutTaxPaymentStr { get; set; }
/// <summary>
/// مبلغ پرداخت کامل
/// Double
/// </summary>
public double MonthlyTotalPaymentDouble { get; set; }
/// <summary>
/// مبلغ پرداخت کامل
/// string
/// </summary>
public string MonthlyTotalPaymentStr { get; set; }
/// <summary>
/// مالیات بر ارزش افزوده
/// Double
@@ -83,4 +110,52 @@ public class ReviewAndPaymentViewModel
/// آی دی طرف حساب
/// </summary>
public long ContractingPartTempId { get; set; }
/// <summary>
/// لیست اقساط ماهیانه
/// </summary>
public List<MonthlyInstallment> MonthlyInstallments { get; set; }
/// <summary>
/// تاریخ شروع قرارداد در اول ماه جاری
/// -
/// شمسی
/// </summary>
public string ContractStartCurrentMonthFa { get; set; }
/// <summary>
/// تاریخ شروع قرارداد در اول ماه جاری
/// -
/// میلادی
/// </summary>
public DateTime ContractStartCurrentMonthGr { get; set; }
/// <summary>
/// تاریخ شروع قرارداد در اول ماه بعد
/// -
/// شمسی
/// </summary>
public string ContractStartNextMonthFa{ get; set; }
/// <summary>
/// تاریخ شروع قرارداد در اول ماه بعد
/// -
/// میلادی
/// </summary>
public DateTime ContractStartNextMonthGr { get; set; }
/// <summary>
/// تاریخ پایان قرارداد
/// -
/// میلادی
/// </summary>
public DateTime ContractEndGr { get; set; }
/// <summary>
/// تاریخ پایان قرارداد
/// -
/// شمسی
/// </summary>
public string ContractEndFa { get; set; }
}

View File

@@ -16,5 +16,6 @@ public class RotatingShiftViewModel
public bool IsEveningShift { get; set; }
public bool IsNightShift { get; set; }
public string RotatingDate { get; set; }
public int WinRate { get; set; }
}

View File

@@ -107,4 +107,13 @@ public class CreateWorkshop
public string HasCustomizeCheckoutService { get; set; }
/// <summary>
/// محاسبه اضافه کار فیش حقوقی در لیست بیمه
/// </summary>
public bool InsuranceCheckoutOvertime { get; set; }
/// <summary>
/// محاسبه حق اولاد در لیست بیمه
/// </summary>
public bool InsuranceCheckoutFamilyAllowance { get; set; }
}

View File

@@ -22,6 +22,7 @@ public class PrintListWorkshop
public string TypeOfOwnership { get; set; }
public string ArchiveCode { get; set; }
public int ArchiveCodeInt { get; set; }
public string AgentName { get; set; }

View File

@@ -124,7 +124,7 @@ public class CheckoutApplication : ICheckoutApplication
//حق تاهل
var marriedAllowance = command.MarriedAllowance.MoneyToDouble();
var MontlyYearsBunos =
_yearlySalaryRepository.GetMontlyBunosYears(command.WeeklyTime, command.ContractStartGr, command.ContractEndGr, dayliWage,command.WorkingWeeklyTime,command.officialholiday,command.friday, command.TotalHolidaysAndNotH, command.TotalHolidaysAndNotM, command.Basic, command.FridayStarttoEnd,command.DailFeeComplete,command.HasRollCall, command.HolidayWorking);
_yearlySalaryRepository.GetMontlyBunosYears(command.WeeklyTime, command.ContractStartGr, command.ContractEndGr, dayliWage,command.WorkingWeeklyTime,command.officialholiday,command.friday, command.TotalHolidaysAndNotH, command.TotalHolidaysAndNotM, command.Basic, command.FridayStarttoEnd,command.DailFeeComplete,command.HasRollCall, command.HolidayWorking, command.ShiftWork);
//دستمزد ماهانه
var monthlyWage = MontlyYearsBunos.MontlyWage;
//سنوات

View File

@@ -0,0 +1,70 @@
using System.Text.RegularExpressions;
using _0_Framework.Application;
using Company.Domain.ContactUsAgg;
using CompanyManagment.App.Contracts.ContactUs;
namespace CompanyManagment.Application;
public class ContactUsApplication : IContactUsApplication
{
private readonly IContactUsRepository _contactUsRepository;
public ContactUsApplication(IContactUsRepository contactUsRepository)
{
_contactUsRepository = contactUsRepository;
}
public OperationResult Create(CreateContactUs command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.FirstName))
{
return op.Failed("لطفا نام خود را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.LastName))
{
return op.Failed("لطفا نام خانوادگی خود را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.Email))
{
return op.Failed("لطفا ایمیل خود را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.PhoneNumber))
{
return op.Failed("لطفا شماره تماس خود را وارد کنید");
}
if (!Regex.IsMatch(command.PhoneNumber, @"^(\+98|0)?9\d{9}$"))
{
return op.Failed("شماره تماس وارد شده نامعتبر است");
}
if (!Regex.IsMatch(command.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))
{
return op.Failed("ایمیل وارد شده نامعتبر است");
}
if (string.IsNullOrWhiteSpace(command.Title))
{
return op.Failed("لطفا عنوان پیغام خود را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.Message))
{
return op.Failed("لطفا پیغام خود را وارد کنید");
}
var entity = new ContactUs(command.FirstName, command.LastName, command.Email, command.PhoneNumber,
command.Title, command.Message);
_contactUsRepository.Create(entity);
_contactUsRepository.SaveChanges();
return op.Succcedded();
}
}

View File

@@ -16,9 +16,12 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg.ValueObjects;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.PersonnelCodeAgg;
using CompanyManagment.App.Contracts.PersonnleCode;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
namespace CompanyManagment.Application
{
@@ -33,9 +36,14 @@ namespace CompanyManagment.Application
private readonly IContractRepository _contractRepository;
private readonly IWorkshopRepository _workshopRepository;
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
private readonly ICheckoutRepository _checkoutRepository;
private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
public CustomizeCheckoutApplication(ICustomizeCheckoutRepository customizeCheckoutRepository,
IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, ILeftWorkRepository leftWorkRepository, IEmployeeRepository employeeRepository,
IRollCallMandatoryRepository rollCallMandatoryRepository, IContractRepository contractRepository, IWorkshopRepository workshopRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, IPersonnelCodeRepository personnelCodeRepository)
IRollCallMandatoryRepository rollCallMandatoryRepository, IContractRepository contractRepository, IWorkshopRepository workshopRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, ICheckoutRepository checkoutRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository)
{
_customizeCheckoutRepository = customizeCheckoutRepository;
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
@@ -46,6 +54,9 @@ namespace CompanyManagment.Application
_workshopRepository = workshopRepository;
_customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
_personnelCodeRepository = personnelCodeRepository;
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
_checkoutRepository = checkoutRepository;
_customizeWorkshopGroupSettingsRepository = customizeWorkshopGroupSettingsRepository;
}
public List<CustomizeCheckoutViewModel> Search(SearchCustomizeCheckout searchModel)
@@ -86,18 +97,19 @@ namespace CompanyManagment.Application
x.Amount,
x.FineDate,
x.FineDate.ToGeorgianDateTime(),
x.IsActive, x.CreationDate.ToGeorgianDateTime())
x.IsActive, x.CreationDate.ToGeorgianDateTime(),
x.Id)
).ToList();
var rewards = result.RewardViewModels.Select(x =>
new CustomizeCheckoutReward(x.Amount, x.Description, x.GrantDateGr, x.GrantDateFa,
x.IsActive,x.Title)).ToList();
x.IsActive, x.Title,x.Id)).ToList();
var loanInstallments = result.InstallmentViewModels.Select(x =>
new CustomizeCheckoutLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive,x.RemainingAmount,x.LoanAmount)).ToList();
new CustomizeCheckoutLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount,x.Id)).ToList();
var salaryAids = result.SalaryAidViewModels.Select(x =>
new CustomizeCheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa)).ToList();
new CustomizeCheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa,x.Id)).ToList();
var regularShift = result.EmployeeSettingsShifts.Select(x =>
@@ -110,15 +122,23 @@ namespace CompanyManagment.Application
result.FamilyAllowance, result.LeavePay, result.InsuranceDeduction, result.FineAbsenceDeduction,
result.LateToWorkDeduction, result.EarlyExitDeduction, result.RewardPay, result.SalaryAidDeduction, result.InstallmentDeduction, result.FineDeduction,
result.TaxDeduction, result.SumOfWorkingDays, result.TotalClaimsStr, result.TotalDeductionsStr, result.TotalPayment, contract?.ContractNo ?? "-",
fines,loanInstallments,salaryAids,rewards, result.LateToWorkValue, result.SettingSalary, result.DailyWage, result.ShiftStatus,result.IrregularShift,result.CustomizeRotatingShifts,
fines, loanInstallments, salaryAids, rewards, result.LateToWorkValue, result.SettingSalary, result.DailyWage, result.ShiftStatus, result.IrregularShift, result.CustomizeRotatingShifts,
regularShift);
_customizeCheckoutRepository.Create(entity);
_customizeCheckoutRepository.Create(entity);
_customizeCheckoutRepository.RemoveEmployeeCustomizeCheckoutInDates(command.WorkshopId, employee.id, command.ContractStart, command.ContractEnd);
_customizeCheckoutRepository.SaveChanges();
return op.Succcedded();
}
public (bool Checkout, bool CustomizeCheckout, bool CustomizeCheckoutTemp) ValidateExistsCheckouts(DateTime startDate,
DateTime endDate, long workshopId, List<long> employeeId)
{
return _customizeCheckoutRepository.ValidateExistsCheckouts(startDate, endDate, workshopId, employeeId);
}
public OperationResult GroupCreate(CreateCustomizeCheckoutGroup command)
{
OperationResult op = new();
@@ -143,18 +163,18 @@ namespace CompanyManagment.Application
x.Amount,
x.FineDate,
x.FineDate.ToGeorgianDateTime(),
x.IsActive, x.CreationDate.ToGeorgianDateTime())
x.IsActive, x.CreationDate.ToGeorgianDateTime(), x.Id)
).ToList();
var rewards = computations.RewardViewModels.Select(x =>
new CustomizeCheckoutReward(x.Amount, x.Description, x.GrantDateGr, x.GrantDateFa,
x.IsActive,x.Title)).ToList();
x.IsActive, x.Title,x.Id)).ToList();
var loanInstallments = computations.InstallmentViewModels.Select(x =>
new CustomizeCheckoutLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive,x.RemainingAmount, x.LoanAmount)).ToList();
new CustomizeCheckoutLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList();
var salaryAids = computations.SalaryAidViewModels.Select(x =>
new CustomizeCheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa)).ToList();
new CustomizeCheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa,x.Id)).ToList();
var regularShift = computations.EmployeeSettingsShifts.Select(x =>
new CustomizeCheckoutRegularShift(x.StartTime, x.EndTime, x.Placement)).ToList();
@@ -166,20 +186,20 @@ namespace CompanyManagment.Application
computations.FamilyAllowance, computations.LeavePay, computations.InsuranceDeduction, computations.FineAbsenceDeduction,
computations.LateToWorkDeduction, computations.EarlyExitDeduction, computations.RewardPay, computations.SalaryAidDeduction, computations.InstallmentDeduction, computations.FineDeduction,
computations.TaxDeduction, computations.SumOfWorkingDays, computations.TotalClaimsStr, computations.TotalDeductionsStr, computations.TotalPayment, contract?.ContractNo ?? "-",
fines,loanInstallments,salaryAids,rewards, computations.LateToWorkValue, computations.SettingSalary, computations.DailyWage, computations.ShiftStatus,computations.IrregularShift,
fines, loanInstallments, salaryAids, rewards, computations.LateToWorkValue, computations.SettingSalary, computations.DailyWage, computations.ShiftStatus, computations.IrregularShift,
computations.CustomizeRotatingShifts, regularShift);
_customizeCheckoutRepository.Create(entity);
_customizeCheckoutRepository.Create(entity);
_customizeCheckoutRepository.RemoveEmployeeCustomizeCheckoutInDates(command.WorkshopId, employeeId, command.ContractStart, command.ContractEnd);
}
_customizeCheckoutRepository.SaveChanges();
return op.Succcedded();
}
public OperationResult GroupRemove(long workshopId,List<long> idList)
public OperationResult GroupRemove(long workshopId, List<long> idList)
{
OperationResult op = new();
var entities = _customizeCheckoutRepository.GetRange(workshopId,idList);
var entities = _customizeCheckoutRepository.GetRange(workshopId, idList);
if (entities == null)
return op.Succcedded();
_customizeCheckoutRepository.RemoveRange(entities);
@@ -215,12 +235,12 @@ namespace CompanyManagment.Application
return op.Failed("خطای سیستمی");
var pc = new PersianCalendar();
var checkoutDate = new DateTime(yearFa, monthFa, 1,pc);
var checkoutDate = new DateTime(yearFa, monthFa, 1, pc);
var nextMonth = checkoutDate.AddMonthsFa(1, out _).ToGeorgianDateTime().Date;
var today = DateTime.Today;
if (nextMonth > today)
return op.Failed("امکان ایجاد فیش برای ماه جاری یا آینده وجود ندارد");
return op.Failed("امکان ایجاد فیش برای ماه جاری یا آینده وجود ندارد");
//validate parsed datetime
var startOfMonth = new DateTime(yearFa, monthFa, 1, new PersianCalendar()).Date;
@@ -258,7 +278,7 @@ namespace CompanyManagment.Application
WorkshopId = workshopId
});
var workshopGroups = _customizeWorkshopSettingsRepository
.GetWorkshopIncludeGroupsByWorkshopId(workshopId)?
.GetWorkshopIncludeGroupsByWorkshopId(workshopId)?
.GroupSettings.Where(x => x.MainGroup == false);
var employeeSettings = _customizeWorkshopSettingsRepository.GetEmployeeSettingsByWorkshopId(workshopId);
@@ -270,8 +290,8 @@ namespace CompanyManagment.Application
var statusesWithActiveLeftWorks = statuses
.Where(status => workshopLeftWorksInMonth.Any(leftWork => leftWork.EmployeeId == status.EmployeeId &&
leftWork.StartWorkDateGr.Date <= status.StartDateGr.Date &&
leftWork.LeftWorkDateGr.Date >= status.EndDateGr.Date)).ToList();
leftWork.StartWorkDateGr.Date <= status.EndDateGr.Date &&
leftWork.LeftWorkDateGr.Date >= status.StartDateGr.Date)).ToList();
@@ -299,8 +319,8 @@ namespace CompanyManagment.Application
if (workshopId == 170)
{
List<long> employeesIds = [ 45084, 7980, 5976,45214,45215];
foreach (var employeesId in employeesIds)
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository.GetEmployeeSettingsByGroupSettingsId(117).Select(x => x.EmployeeId).ToList();
foreach (var employeesId in exceptionEmployeeIds)
{
var status = new RollCallEmployeeStatusViewModel()
@@ -331,16 +351,16 @@ namespace CompanyManagment.Application
}
color = reason switch
{
"فاقد تعیین حقوق" => "orange",
"فاقد تعیین حقوق" => "orange",
"فاقد گروهبندی" => "red",
"فاقد گروهبندی" => "red",
"خطای سیستمی" => "black",
"خطای سیستمی" => "black",
"دارای فیش غیر رسمی" =>"green",
"دارای فیش غیر رسمی" => "green",
_ => "white"
};
_ => "white"
};
return new EligibleEmployeesForCustomizeCheckoutViewModel()
{
Id = x.Id,
@@ -350,7 +370,7 @@ namespace CompanyManagment.Application
Color = color,
PersonnelCode = personnelCodes.FirstOrDefault(y => x.Id == y.EmployeeId)?.PersonnelCode.ToString() ?? "-"
};
}).OrderByDescending(x=>x.IsEligible).ThenByDescending(x=>x.Reason).ToList();
}).OrderByDescending(x => x.IsEligible).ThenByDescending(x => x.Reason).ToList();
return op.Succcedded(employees);
}
}

View File

@@ -1,6 +1,4 @@
using _0_Framework.Application;
using _0_Framework.Application;
using Company.Domain.ContractAgg;
using Company.Domain.CustomizeCheckoutAgg.ValueObjects;
using Company.Domain.CustomizeCheckoutTempAgg;
@@ -21,6 +19,7 @@ using Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
using Company.Domain.PersonnelCodeAgg;
using CompanyManagment.App.Contracts.PersonnleCode;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
namespace CompanyManagment.Application
{
@@ -35,8 +34,10 @@ namespace CompanyManagment.Application
private readonly IContractRepository _contractRepository;
private readonly IPersonnelCodeRepository _personnelCodeRepository;
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository;
private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
public CustomizeCheckoutTempApplication(IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, ILeftWorkRepository leftWorkRepository, IEmployeeRepository employeeRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, IContractRepository contractRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IWorkshopRepository workshopRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, IPersonnelCodeRepository personnelCodeRepository)
public CustomizeCheckoutTempApplication(IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, ILeftWorkRepository leftWorkRepository, IEmployeeRepository employeeRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, IContractRepository contractRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IWorkshopRepository workshopRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository)
{
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
_leftWorkRepository = leftWorkRepository;
@@ -47,6 +48,7 @@ namespace CompanyManagment.Application
_workshopRepository = workshopRepository;
_customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
_personnelCodeRepository = personnelCodeRepository;
_customizeWorkshopGroupSettingsRepository = customizeWorkshopGroupSettingsRepository;
}
public IEnumerable<CustomizeCheckoutViewModel> Search(SearchCustomizeCheckout searchModel)
@@ -72,18 +74,18 @@ namespace CompanyManagment.Application
x.Amount,
x.FineDate,
x.FineDate.ToGeorgianDateTime(),
x.IsActive, x.CreationDate.ToGeorgianDateTime())
x.IsActive, x.CreationDate.ToGeorgianDateTime(), x.Id)
).ToList();
var rewards = result.RewardViewModels.Select(x =>
new CustomizeCheckoutTempReward(x.Amount, x.Description, x.GrantDateGr, x.GrantDateFa,
x.IsActive,x.Title)).ToList();
x.IsActive, x.Title, x.Id)).ToList();
var loanInstallments = result.InstallmentViewModels.Select(x =>
new CustomizeCheckoutTempLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount,x.LoanAmount)).ToList();
new CustomizeCheckoutTempLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList();
var salaryAids = result.SalaryAidViewModels.Select(x =>
new CustomizeCheckoutTempSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa)).ToList();
new CustomizeCheckoutTempSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList();
var regularShift = result.EmployeeSettingsShifts.Select(x =>
new CustomizeCheckoutRegularShift(x.StartTime, x.EndTime, x.Placement)).ToList();
@@ -95,11 +97,11 @@ namespace CompanyManagment.Application
result.FamilyAllowance, result.LeavePay, result.InsuranceDeduction, result.FineAbsenceDeduction,
result.LateToWorkDeduction, result.EarlyExitDeduction, result.RewardPay, result.SalaryAidDeduction, result.InstallmentDeduction, result.FineDeduction,
result.TaxDeduction, result.SumOfWorkingDays, result.TotalClaimsStr, result.TotalDeductionsStr, result.TotalPayment, contract?.ContractNo ?? "-",
fines, loanInstallments, salaryAids, rewards,result.LateToWorkValue, result.SettingSalary,result.DailyWage, result.ShiftStatus, result.IrregularShift, result.CustomizeRotatingShifts,
fines, loanInstallments, salaryAids, rewards, result.LateToWorkValue, result.SettingSalary, result.DailyWage, result.ShiftStatus, result.IrregularShift, result.CustomizeRotatingShifts,
regularShift);
_customizeCheckoutTempRepository.Create(entity);
_customizeCheckoutTempRepository.Create(entity);
_customizeCheckoutTempRepository.RemoveEmployeeTemporaryCheckoutInDates(command.WorkshopId, employee.id, command.ContractStart, command.ContractEnd);
_customizeCheckoutTempRepository.SaveChanges();
return op.Succcedded();
@@ -125,18 +127,18 @@ namespace CompanyManagment.Application
x.Amount,
x.FineDate,
x.FineDate.ToGeorgianDateTime(),
x.IsActive, x.CreationDate.ToGeorgianDateTime())
x.IsActive, x.CreationDate.ToGeorgianDateTime(), x.Id)
).ToList();
var rewards = computations.RewardViewModels.Select(x =>
new CustomizeCheckoutTempReward(x.Amount, x.Description, x.GrantDateGr, x.GrantDateFa,
x.IsActive,x.Title)).ToList();
x.IsActive, x.Title, x.Id)).ToList();
var loanInstallments = computations.InstallmentViewModels.Select(x =>
new CustomizeCheckoutTempLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount,x.LoanAmount)).ToList();
new CustomizeCheckoutTempLoanInstallments(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList();
var salaryAids = computations.SalaryAidViewModels.Select(x =>
new CustomizeCheckoutTempSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa)).ToList();
new CustomizeCheckoutTempSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList();
var contract = contracts.Where(x => x.IsActiveString == "true").FirstOrDefault(x => x.EmployeeId == employeeId);
@@ -152,7 +154,7 @@ namespace CompanyManagment.Application
computations.FamilyAllowance, computations.LeavePay, computations.InsuranceDeduction, computations.FineAbsenceDeduction,
computations.LateToWorkDeduction, computations.EarlyExitDeduction, computations.RewardPay, computations.SalaryAidDeduction, computations.InstallmentDeduction, computations.FineDeduction,
computations.TaxDeduction, computations.SumOfWorkingDays, computations.TotalClaimsStr, computations.TotalDeductionsStr, computations.TotalPayment, contract?.ContractNo ?? "-",
fines, loanInstallments, salaryAids, rewards,computations.LateToWorkValue, computations.SettingSalary, computations.DailyWage, computations.ShiftStatus, computations.IrregularShift,
fines, loanInstallments, salaryAids, rewards, computations.LateToWorkValue, computations.SettingSalary, computations.DailyWage, computations.ShiftStatus, computations.IrregularShift,
computations.CustomizeRotatingShifts, regularShift);
_customizeCheckoutTempRepository.Create(entity);
_customizeCheckoutTempRepository.RemoveEmployeeTemporaryCheckoutInDates(command.WorkshopId, employeeId, command.ContractStart, command.ContractEnd);
@@ -247,8 +249,8 @@ namespace CompanyManagment.Application
if (workshopId == 170)
{
List<long> employeesIds = [45084, 7980, 5976, 45214,45215];
foreach (var employeesId in employeesIds)
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository.GetEmployeeSettingsByGroupSettingsId(117).Select(x => x.EmployeeId).ToList();
foreach (var employeesId in exceptionEmployeeIds)
{
var status = new RollCallEmployeeStatusViewModel()

View File

@@ -29,6 +29,7 @@ using Company.Domain.RollCallEmployeeAgg;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
using Company.Domain.LeftWorkAgg;
using CompanyManagment.App.Contracts.Employee.DTO;
using Company.Domain.EmployeeAuthorizeTempAgg;
namespace CompanyManagment.Application;
@@ -49,7 +50,6 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication;
private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication;
private readonly IEmployeeDocumentsRepository _employeeDocumentsRepository;
private readonly IEmployeeBankInformationApplication _employeeBankInformationApplication;
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
private readonly IUidService _uidService;
@@ -58,8 +58,9 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
private readonly IPersonnelCodeRepository _personnelCodeRepository;
private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
private readonly IEmployeeAuthorizeTempRepository _employeeAuthorizeTempRepository;
public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IEmployeeDocumentsRepository employeeDocumentsRepository, IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, IEmployeeClientTempRepository employeeClientTempRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, ILeftWorkRepository leftWorkRepository) : base(context)
public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IEmployeeDocumentsRepository employeeDocumentsRepository, IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, IEmployeeClientTempRepository employeeClientTempRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, ILeftWorkRepository leftWorkRepository, IEmployeeAuthorizeTempRepository employeeAuthorizeTempRepository) : base(context)
{
_context = context;
_WorkShopRepository = workShopRepository;
@@ -68,15 +69,14 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
_rollCallEmployeeRepository = rollCallEmployeeRepository;
_customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication;
_employeeDocumentsApplication = employeeDocumentsApplication;
_employeeDocumentsRepository = employeeDocumentsRepository;
_employeeBankInformationApplication = employeeBankInformationApplication;
_leftWorkTempRepository = leftWorkTempRepository;
_uidService = uidService;
_customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository;
_personnelCodeRepository = personnelCodeRepository;
_employeeClientTempRepository = employeeClientTempRepository;
_customizeWorkshopGroupSettingsRepository = customizeWorkshopGroupSettingsRepository;
_leftWorkRepository = leftWorkRepository;
_employeeAuthorizeTempRepository = employeeAuthorizeTempRepository;
_EmployeeRepository = employeeRepository;
}
@@ -201,10 +201,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
dateOfIssue,
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality, command.IdNumberSerial, command.IdNumberSeri,
command.Phone, command.Address,
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
command.FieldOfStudy, command.BankCardNumber,
@@ -212,7 +212,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
command.InsuranceHistoryByMonth, command.NumberOfChildren, command.OfficePhone, command.MclsUserName, command.MclsPassword, command.EserviceUserName, command.EservicePassword,
command.TaxOfficeUserName, command.TaxOfficepassword, command.SanaUserName, command.SanaPassword);
if (command.IsAuthorized)
{
employeeData.Authorized();
}
_EmployeeRepository.Create(employeeData);
_EmployeeRepository.SaveChanges();
@@ -1248,10 +1251,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
var newEmployee = new Employee(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, apiBirthDate,
dateOfIssue, null, identityInfo.NationalId, idNumber, gender, "ایرانی");
dateOfIssue, null, identityInfo.NationalId, idNumber, gender, "ایرانی", identityInfo.ShenasnameSerial, identityInfo.ShenasnameSeri);
newEmployee.Authorized();
await _EmployeeRepository.CreateAsync(newEmployee);
await _context.SaveChangesAsync();
await _EmployeeRepository.SaveChangesAsync();
return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
{
@@ -1484,15 +1487,25 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
{
employee.Edit(command.FName, command.LName, command.FatherName, command.BirthDate.ToGeorgianDateTime(),
employee.DateOfIssue, employee.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender,
command.Nationality,
employee.Phone, employee.Address, employee.State, employee.City, employee.MaritalStatus,
employee.MilitaryService,
command.Nationality, employee.Phone, employee.Address, employee.State, employee.City,
command.MaritalStatus, command.MilitaryService,
employee.LevelOfEducation, employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch,
employee.InsuranceCode, employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth,
employee.NumberOfChildren, employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
}
else
{
employee.EditAuthorizeEmployee(employee.DateOfIssue, employee.PlaceOfIssue,
employee.Phone, employee.Address, employee.State, employee.City, command.MaritalStatus,
command.MilitaryService, employee.LevelOfEducation, employee.FieldOfStudy,
employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode,
employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth, employee.NumberOfChildren,
employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
}
await _EmployeeRepository.SaveChangesAsync();
return op.Succcedded();
@@ -1503,5 +1516,105 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
return await _EmployeeRepository.WorkedEmployeesInWorkshopSelectList(workshopId);
}
public async Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate)
{
var op = new OperationResult<EmployeeDataFromApiViewModel>();
var birthDateGr = birthDate.ToGeorgianDateTime();
if (_EmployeeRepository.Exists(x => x.NationalCode == nationalCode))
{
var employee = _EmployeeRepository.GetByNationalCode(nationalCode);
if (employee.IsAuthorized == false)
{
var apiResult = await _uidService.GetPersonalInfo(nationalCode, birthDate);
if (apiResult.ResponseContext.Status.Code != 0)
{
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
}
var basicInfo = apiResult.BasicInformation;
var identityInfo = apiResult.IdentificationInformation;
var gender = basicInfo.GenderEnum switch
{
Gender.Female => "زن",
Gender.Male => "مرد",
_ => throw new AggregateException()
};
var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
employee.Edit(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, birthDateGr,
employee.DateOfIssue, employee.PlaceOfIssue, identityInfo.NationalId, idNumber,
gender, "ایرانی", employee.Phone, employee.Address, employee.State, employee.City,
employee.MaritalStatus, employee.MilitaryService, employee.LevelOfEducation,
employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode, employee.InsuranceHistoryByYear,
employee.InsuranceHistoryByMonth, employee.NumberOfChildren,
employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
employee.Authorized();
await _EmployeeRepository.SaveChangesAsync();
}
return op.Failed("این پرسنل در بانک اطلاعات موجود میباشد");
}
else
{
EmployeeDataFromApiViewModel data;
if (_employeeAuthorizeTempRepository.Exists(x => x.NationalCode == nationalCode))
{
var employeeAuthorizeTemp = await _employeeAuthorizeTempRepository.GetByNationalCode(nationalCode);
if (employeeAuthorizeTemp.BirthDate.ToFarsi() != birthDate)
{
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
}
data = new EmployeeDataFromApiViewModel()
{
BirthDate = employeeAuthorizeTemp.BirthDate.ToFarsi(),
NationalCode = employeeAuthorizeTemp.NationalCode,
IdNumber = employeeAuthorizeTemp.IdNumber,
FName = employeeAuthorizeTemp.FName,
FatherName = employeeAuthorizeTemp.FatherName,
Gender = employeeAuthorizeTemp.Gender,
LName = employeeAuthorizeTemp.LName,
};
return op.Succcedded(data);
}
var apiResult = await _uidService.GetPersonalInfo(nationalCode, birthDate);
if (apiResult.ResponseContext.Status.Code != 0)
{
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
}
var basicInfo = apiResult.BasicInformation;
var identityInfo = apiResult.IdentificationInformation;
data = new EmployeeDataFromApiViewModel()
{
BirthDate = identityInfo.BirthDate,
NationalCode = identityInfo.NationalId,
IdNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber,
FatherName = basicInfo.FatherName,
FName = basicInfo.FirstName,
Gender = basicInfo.GenderEnum,
LName = basicInfo.LastName,
IdNumberSeri = identityInfo.ShenasnameSeri,
IdNumberSerial = identityInfo.ShenasnameSerial
};
var newAuthorizeTemp = new EmployeeAuthorizeTemp(data.Gender, data.FName, data.LName, data.FatherName, birthDateGr, data.NationalCode, data.IdNumber, data.IdNumberSerial, data.IdNumberSeri);
await _employeeAuthorizeTempRepository.CreateAsync(newAuthorizeTemp);
await _employeeAuthorizeTempRepository.SaveChangesAsync();
return op.Succcedded(data);
}
}
#endregion
}

View File

@@ -1,4 +1,6 @@
using _0_Framework.Application;
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using Company.Domain.EmployeeClientTempAgg;
using CompanyManagment.App.Contracts.EmployeeClientTemp;
@@ -29,4 +31,10 @@ public class EmployeeClientTempApplication : IEmployeeClientTempApplication
{
return _employeeClientTempRepository.GetDetails(employeeId, workshopId);
}
public async Task<List<EmployeeClientTempViewModel>> GetByEmployeeId(long employeeId)
{
return await _employeeClientTempRepository.GetByEmployeeId(employeeId);
}
}

View File

@@ -88,7 +88,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType,roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == employeeId))
@@ -133,7 +133,7 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType);
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType,roleId);
newEntities.Add(newEntity);
}
@@ -206,7 +206,7 @@ namespace CompanyManagment.Application
public OperationResult DeleteUnsubmittedItems(long workshopId, long employeeId)
{
OperationResult op = new();
(_, UserType userType) = _authHelper.GetUserTypeWithId();
(_, UserType userType,_) = _authHelper.GetUserTypeWithId();
var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
var items =
entity.EmployeeDocumentItemCollection.Where(x =>
@@ -244,7 +244,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType, roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == command.EmployeeId))
return op.Failed("پرسنل یافت نشد");
@@ -289,7 +289,7 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(command.WorkshopId, command.EmployeeId, mediaOpResult.SendId, entity.id, command.Label, uploaderId, uploaderType);
var newEntity = new EmployeeDocumentItem(command.WorkshopId, command.EmployeeId, mediaOpResult.SendId, entity.id, command.Label, uploaderId, uploaderType, roleId);
_employeeDocumentItemRepository.Create(newEntity);
_employeeDocumentItemRepository.SaveChanges();
@@ -311,7 +311,7 @@ namespace CompanyManagment.Application
.ToList();
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
var unsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted &&
x.UploaderType == UserType.Client).ToList();
@@ -356,7 +356,7 @@ namespace CompanyManagment.Application
if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
return op.Failed("مدارک الزامی بارگذاری نشده اند");
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType, roleId) = _authHelper.GetUserTypeWithId();
var unsubmittedDocs = notRejectedDocs.Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted).ToList();
@@ -386,10 +386,9 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType,roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == employeeId))
return op.Failed("پرسنل یافت نشد");
@@ -430,11 +429,12 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByClient);
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, roleId,DocumentStatus.SubmittedByClient);
newEntities.Add(newEntity);
}
var currentItems = entity.EmployeeDocumentItemCollection.GroupBy(x => x.DocumentLabel)
.Where(x => command.Any(a => a.Label == x.Key))
.Select(x => x.MaxBy(y => y.CreationDate));
//This can bite!
@@ -660,6 +660,12 @@ namespace CompanyManagment.Application
return result;
}
public Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentForClient(long workshopId, long accountId)
{
return _employeeDocumentsRepository.GetClientRejectedDocumentForClient(workshopId, accountId);
}
#endregion
#region Admin Only Methods
@@ -670,7 +676,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType, roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == employeeId))
@@ -725,7 +731,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType,roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == employeeId))
@@ -778,7 +784,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType, roleId) = _authHelper.GetUserTypeWithId();
//ToDo: add check for leftwork
if (!_employeeRepository.Exists(x => x.id == command.EmployeeId))
@@ -834,7 +840,7 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(command.WorkshopId, command.EmployeeId, mediaOpResult.SendId, entity.id, command.Label, uploaderId, uploaderType);
var newEntity = new EmployeeDocumentItem(command.WorkshopId, command.EmployeeId, mediaOpResult.SendId, entity.id, command.Label, uploaderId, uploaderType, roleId);
_employeeDocumentItemRepository.Create(newEntity);
_employeeDocumentItemRepository.SaveChanges();
@@ -856,7 +862,7 @@ namespace CompanyManagment.Application
//if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
// return op.Failed("مدارک الزامی بارگذاری نشده اند");
var (userId, operatorType) = _authHelper.GetUserTypeWithId();
var (userId, operatorType, _) = _authHelper.GetUserTypeWithId();
var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
(x.DocumentStatus == DocumentStatus.Unsubmitted && x.UploaderType == UserType.Admin)).ToList();
@@ -895,7 +901,7 @@ namespace CompanyManagment.Application
//if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
// return op.Failed("مدارک الزامی بارگذاری نشده اند");
var (userId, operatorType) = _authHelper.GetUserTypeWithId();
var (userId, operatorType, _) = _authHelper.GetUserTypeWithId();
var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
(x.DocumentStatus == DocumentStatus.Unsubmitted && x.UploaderType == UserType.Admin)).ToList();
@@ -1131,7 +1137,7 @@ namespace CompanyManagment.Application
OperationResult op = new();
var entity = _employeeDocumentItemRepository.Get(documentItemId);
(long operatorId, _) = _authHelper.GetUserTypeWithId();
(long operatorId, _,_) = _authHelper.GetUserTypeWithId();
if (entity == null)
return op.Failed(ApplicationMessages.RecordNotFound);
@@ -1165,6 +1171,45 @@ namespace CompanyManagment.Application
return await _employeeDocumentsRepository.GetAdminWorkFlowCountForNewEmployees(workshopIds);
}
public async Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentCreatedEmployeeForAdmin(List<long> workshops, long roleId)
{
return await _employeeDocumentsRepository.GetWorkshopDocumentCreatedEmployeeForAdmin(workshops, roleId);
}
public async Task<ICollection<WorkshopWithEmployeeDocumentsViewModel>> GetWorkshopDocumentRejectedForAdmin(List<long> workshops, long roleId)
{
return await _employeeDocumentsRepository.GetWorkshopDocumentRejectedForAdmin(workshops, roleId);
}
public async Task<List<EmployeeDocumentsViewModel>> GetRejectedItemsByWorkshopIdAndRoleForAdminWorkFlow(long workshopId, long roleId)
{
return await _employeeDocumentsRepository.GetRejectedItemsByWorkshopIdAndRoleForAdminWorkFlow(workshopId,
roleId);
}
public Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetCreatedEmployeesWorkshopDocumentForAdmin(
List<long> workshops, long roleId)
{
return _employeeDocumentsRepository.GetCreatedEmployeesWorkshopDocumentForAdmin(workshops, roleId);
}
public Task<List<EmployeeDocumentsViewModel>> GetCreatedEmployeesDocumentByWorkshopIdForAdmin(long workshopId)
{
return _employeeDocumentsRepository.GetCreatedEmployeesDocumentByWorkshopIdForAdmin(workshopId);
}
public Task<List<WorkshopWithEmployeeDocumentsViewModel>> GetClientRejectedDocumentWorkshopsForAdmin(
List<long> workshops, long roleId)
{
return _employeeDocumentsRepository.GetClientRejectedDocumentWorkshopsForAdmin(workshops,roleId);
}
public Task<List<EmployeeDocumentsViewModel>> GetClientRejectedDocumentByWorkshopIdForAdmin(long workshopId)
{
return _employeeDocumentsRepository.GetClientRejectedDocumentByWorkshopIdForAdmin(workshopId);
}
#endregion
#region Checker Only Methods
@@ -1189,7 +1234,7 @@ namespace CompanyManagment.Application
return op.Failed("رکورد مورد نظر یافت نشد");
}
(long operatorId, UserType userType) = _authHelper.GetUserTypeWithId();
(long operatorId, UserType userType,long roleId) = _authHelper.GetUserTypeWithId();
if ((item.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient) == false)
return op.Failed("امکان بررسی رکورد مورد نظر وجود ندارد");
@@ -1390,7 +1435,7 @@ namespace CompanyManagment.Application
{
OperationResult op = new();
var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
var (uploaderId, uploaderType,roleId) = _authHelper.GetUserTypeWithId();
if (!_employeeRepository.Exists(x => x.id == employeeId))
@@ -1414,27 +1459,42 @@ namespace CompanyManagment.Application
{
var opCreate = Create(new CreateEmployeeDocuments()
{ EmployeeId = employeeId, WorkshopId = workshopId });
if (opCreate.IsSuccedded == false) return opCreate;
entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopId(employeeId, workshopId);
if (opCreate.IsSuccedded == false)
return opCreate;
entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
}
List<EmployeeDocumentItem> newEntities = new();
foreach (var item in command)
{
DeleteMultipleUnsubmittedDocumentsByLabel(entity, item.Label, uploaderType);
long mediaId = 0;
if (item.WithoutPicture)
{
var employeeDocumentItem =
entity.EmployeeDocumentItemCollection.First(x => x.DocumentLabel == item.Label);
mediaId = employeeDocumentItem.MediaId;
}
else
{
DeleteMultipleUnsubmittedDocumentsByLabel(entity, item.Label, uploaderType);
var mediaOpResult = UploadDocumentItemFile(item.PictureFile, item.Label.ToString(),
$"temp/{workshopId}/{employeeId}");
var mediaOpResult = UploadDocumentItemFile(item.PictureFile, item.Label.ToString(),
$"temp/{workshopId}/{employeeId}");
if (mediaOpResult.IsSuccedded == false)
return mediaOpResult;
if (mediaOpResult.IsSuccedded == false)
return mediaOpResult;
//if the mediaId is already in use in our table return failed
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
//if the mediaId is already in use in our table return failed
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByAdmin);
mediaId = mediaOpResult.SendId;
}
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaId, entity.id, item.Label, uploaderId, uploaderType,roleId ,DocumentStatus.SubmittedByAdmin);
newEntities.Add(newEntity);
}
@@ -1459,6 +1519,24 @@ namespace CompanyManagment.Application
return op.Succcedded(entity.id);
}
public EmployeeDocumentItemViewModel GetOneDocumentItemDetailsForAdmin(long employeeId, long workshopId,long documentItemId)
{
var documentItem = _employeeDocumentItemRepository.GetWithEmployeeDocumentsByItemId(documentItemId);
var viewModel = new EmployeeDocumentItemViewModel()
{
CreationDateTime = documentItem.CreationDate,
DocumentItemLabel = documentItem.DocumentLabel,
EmployeeDocumentsId = documentItem.EmployeeDocumentId,
Gender = documentItem.EmployeeDocuments.Gender,
Id = documentItem.id,
Status = documentItem.DocumentStatus,
MediaId = documentItem.MediaId,
RejectionMessage = documentItem.RejectionReason,
UploaderType = documentItem.UploaderType
};
return viewModel;
}
#endregion
@@ -1785,8 +1863,9 @@ namespace CompanyManagment.Application
StatusString = item.DocumentStatus.ToString().ToLower(),
PicturePath = medias.FirstOrDefault(x => x.Id == item.MediaId)?.Path ?? "",
RejectionMessage = item.RejectionReason,
UploaderType = item.UploaderType
};
UploaderType = item.UploaderType,
MediaId = medias.FirstOrDefault(x => x.Id == item.MediaId)?.Id ?? 0,
};
}

View File

@@ -28,7 +28,7 @@ public class EmployeeInsurancListDataApplication : IEmployeeInsurancListDataAppl
var employeeInsurancListData = new EmployeeInsurancListData(command.InsuranceListId, command.EmployeeId, command.WorkingDays, command.DailyWage, command.MonthlySalary, command.MonthlyBenefits,
command.MonthlyBenefitsIncluded, command.BenefitsIncludedContinuous, command.BenefitsIncludedNonContinuous, command.InsuranceShare,
command.StartWorkDate,command.LeftWorkDate,command.JobId,command.IncludeStatus, command.BaseYears,command.MarriedAllowance);
command.StartWorkDate,command.LeftWorkDate,command.JobId,command.IncludeStatus, command.BaseYears,command.MarriedAllowance,command.OverTimePay,command.FamilyAllowance);
_employeeInsurancListDataRepository.Create(employeeInsurancListData);
_employeeInsurancListDataRepository.SaveChanges();
return operation.Succcedded();

View File

@@ -18,7 +18,7 @@ public class FinancialTransactionApplication : IFinancialTransactionApplication
{
var op = new OperationResult();
var now = DateTime.Now;
var check = _financialTransactionRepository.Exists(x => x.CreationDate.Date == now.Date && x.CreationDate.Hour == now.Hour && x.CreationDate.Minute == now.Minute &&
var check = _financialTransactionRepository.Exists(x => x.CreationDate.Date == now.Date && x.CreationDate.Hour == now.Hour && x.CreationDate.Minute == now.Minute && x.CreationDate.Second == now.Second &&
x.FinancialStatementId == command.FinancialStatementId
&& x.Creditor == command.Creditor &&
x.Deptor == command.Deptor &&
@@ -32,9 +32,14 @@ public class FinancialTransactionApplication : IFinancialTransactionApplication
command.TypeOfTransaction, command.DescriptionOption, command.Deptor, command.Creditor, 0);
_financialTransactionRepository.Create(transaction);
_financialTransactionRepository.SaveChanges();
return op.Succcedded();
}
else
{
return op.Failed("تکراری است");
}
return op.Succcedded();
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using _0_Framework.Application;
using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg;
@@ -9,7 +10,10 @@ using Company.Domain.EmployeeAgg;
using Company.Domain.File1;
using Company.Domain.FineAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using CompanyManagment.App.Contracts.Fine;
using CompanyManagment.EFCore.Repository;
using Microsoft.EntityFrameworkCore.Scaffolding.Metadata;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace CompanyManagment.Application;
@@ -22,18 +26,26 @@ public class FineApplication : IFineApplication
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository;
public readonly ICustomizeCheckoutTempRepository CustomizeCheckoutTempRepository;
private readonly IAuthHelper _authHelper;
private readonly ICustomizeCheckoutApplication _customizeCheckoutApplication;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
private readonly ICustomizeCheckoutTempApplication _customizeCheckoutTempApplication;
public FineApplication(IFineRepository fineRepository, IEmployeeRepository employeeRepository,
IWorkshopRepository workshopRepository, ICustomizeCheckoutRepository customizeCheckoutRepository,
IAuthHelper authHelper,ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
IAuthHelper authHelper, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, ICustomizeCheckoutApplication customizeCheckoutApplication, ICustomizeCheckoutTempApplication customizeCheckoutTempApplication)
{
_fineRepository = fineRepository;
_employeeRepository = employeeRepository;
_workshopRepository = workshopRepository;
_customizeCheckoutRepository = customizeCheckoutRepository;
_authHelper = authHelper;
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
CustomizeCheckoutTempRepository = customizeCheckoutTempRepository;
_customizeCheckoutApplication = customizeCheckoutApplication;
_customizeCheckoutTempApplication = customizeCheckoutTempApplication;
}
public List<FineViewModel> GetSearchList(FineSearchViewModel searchModel)
@@ -127,36 +139,94 @@ public class FineApplication : IFineApplication
if (_customizeCheckoutRepository.Exists(x =>
x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year &&
x.MonthInt == month))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است جریمه ای دهید");
//if (_customizeCheckoutRepository.Exists(x =>
// x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year &&
// x.MonthInt == month))
//{
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است جریمه ای دهید");
//}
//if (CustomizeCheckoutTempRepository.Exists(x =>
// x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year &&
// x.MonthInt == month &&
// x.ContractStart <= fineDate && x.ContractEnd >= fineDate))
//{
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است جریمه ای دهید");
//}
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > fineDate)
{
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(fineDate,
oneMonthAgoGr, command.WorkshopId, command.EmployeeIds);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد جریمه ای دهید");
}
}
if (CustomizeCheckoutTempRepository.Exists(x =>
x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year &&
x.MonthInt == month &&
x.ContractStart <= fineDate && x.ContractEnd >= fineDate))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است جریمه ای دهید");
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(fineDate,
fineDate, command.WorkshopId, command.EmployeeIds);
//if (existsCheckouts.Checkout)
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی رسمی صادر شده است جریمه ای دهید");
#endregion
DateTime date = command.FineDate.ToGeorgianDateTime();
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
using var transaction = new TransactionScope();
foreach (var employeeId in command.EmployeeIds)
{
Fine entity = new Fine(employeeId, command.WorkshopId, command.Title, command.Amount.MoneyToDouble(), date,
userId, userType);
_fineRepository.Create(entity);
_fineRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
command.WorkshopId, employeeId,
year, month).GetAwaiter().GetResult();
if (customizeCheckouts != null)
{
var fines = customizeCheckouts.CheckoutFines.ToList();
fines.Add(new(entity.Title,entity.Amount.ToMoney(),
entity.FineDate.ToFarsi(),entity.FineDate,entity.IsActive,entity.CreationDate,entity.id));
customizeCheckouts.SetFines(fines);
}
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, fineDate).GetAwaiter().GetResult();
if (customizeCheckoutTemp != null)
{
var fines = customizeCheckoutTemp.CheckoutFines.ToList();
fines.Add(new(entity.Title, entity.Amount.ToMoney(),
entity.FineDate.ToFarsi(), entity.FineDate, entity.IsActive, entity.CreationDate, entity.id));
customizeCheckoutTemp.SetFines(fines);
}
}
}
_fineRepository.SaveChanges();
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded();
}
@@ -196,20 +266,17 @@ public class FineApplication : IFineApplication
}
if (_customizeCheckoutRepository.Exists(x =>
x.WorkshopId == command.WorkshopId && command.EmployeeId == x.EmployeeId && x.YearInt == year &&
x.MonthInt == month))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است جریمه ای دهید");
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
}
if (CustomizeCheckoutTempRepository.Exists(x =>
x.WorkshopId == command.WorkshopId && command.EmployeeId == x.EmployeeId && x.YearInt == year &&
x.MonthInt == month &&
x.ContractStart <= fineDate && x.ContractEnd >= fineDate))
if (oneMonthAgoGr > fineDate)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است جریمه ای دهید");
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(fineDate,
oneMonthAgoGr, entity.WorkshopId, [entity.EmployeeId]);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد جریمه ای دهید");
}
}
if (!_employeeRepository.Exists(x => x.id == command.EmployeeId))
@@ -217,14 +284,63 @@ public class FineApplication : IFineApplication
return op.Failed("شخص وارد شده معتبر نمیباشد");
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(fineDate,
fineDate, entity.WorkshopId, [entity.EmployeeId]);
DateTime date = command.FineDate.ToGeorgianDateTime();
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType, _) = _authHelper.GetUserTypeWithId();
using var transaction = new TransactionScope();
entity.Edit(command.EmployeeId, command.WorkshopId, command.Title, command.Amount.MoneyToDouble(), date,
userId, userType);
_fineRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
entity.WorkshopId, entity.EmployeeId,
year, month).GetAwaiter().GetResult();
var fines = customizeCheckouts.CheckoutFines.ToList();
var existsSalaryAid = fines.FirstOrDefault(x => x.EntityId == entity.id);
if (existsSalaryAid != null)
{
fines.Remove(existsSalaryAid);
}
fines.Add(new(entity.Title, entity.Amount.ToMoney(), entity.FineDate.ToFarsi(), entity.FineDate,
entity.IsActive, entity.CreationDate, entity.id));
customizeCheckouts.SetFines(fines);
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
entity.WorkshopId, entity.EmployeeId, fineDate).GetAwaiter().GetResult();
var fines = customizeCheckoutTemp.CheckoutFines.ToList();
var existsFines = fines.FirstOrDefault(x => x.EntityId == entity.id);
if (existsFines!= null)
{
fines.Remove(existsFines);
}
fines.Add(new(entity.Title, entity.Amount.ToMoney(), entity.FineDate.ToFarsi(), entity.FineDate,
entity.IsActive, entity.CreationDate, entity.id));
customizeCheckoutTemp.SetFines(fines);
}
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded(entity.id);
}

View File

@@ -89,8 +89,8 @@ public class InsuranceJobApplication: IInsuranceJobApplication
if (_insuranceJobRepositpry.Exists(x => x.InsuranceJobTitle == command.InsuranceJobTitle && x.id!=command.Id))
return opration.Failed("عنوان صنف و درجه تکراری است");
if (_insuranceJobRepositpry.Exists(x => x.EconomicCode == command.EconomicCode && x.id != command.Id))
return opration.Failed("کد اقتصادی تکراری است");
//if (_insuranceJobRepositpry.Exists(x => x.EconomicCode == command.EconomicCode && x.id != command.Id))
// return opration.Failed("کد اقتصادی تکراری است");
try
{

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using Company.Domain.CheckoutAgg;
using Company.Domain.DateSalaryAgg;
using Company.Domain.DateSalaryItemAgg;
using Company.Domain.EmployeeAgg;
@@ -55,8 +56,9 @@ public class InsuranceListApplication: IInsuranceListApplication
private readonly IPersonalContractingPartyApp _contractingPartyApp;
private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
private readonly IInsuranceYearlySalaryApplication _insuranceYearlySalaryApplication;
private readonly ICheckoutRepository _checkoutRepository;
public InsuranceListApplication( IInsuranceListRepository insuranceListRepositpry, IEmployeeInsurancListDataRepository employeeInsurancListDataRepository, IInsuranceEmployeeInfoRepository insuranceEmployeeInfoRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workShopRepository, ILeftWorkInsuranceApplication leftWorkInsuranceApplication, IInsuranceEmployeeInfoApplication insuranceEmployeeInfoApplication, IEmployeeInsurancListDataApplication employeeInsurancListDataApplication, IYearlySalaryApplication yearlySalaryApplication,IYearlySalaryItemApplication yearlySalaryItemApplication ,IInsuranceWorkshopInfoRepository insuranceWorkshopInfoRepository,IInsuranceJobItemRepositpry insuranceJobItemRepository, IDateSalaryRepository dateSalaryRepository, IDateSalaryItemRepository dateSalaryItemRepository, IPersonalContractingPartyApp contractingPartyApp, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IInsuranceYearlySalaryApplication insuranceYearlySalaryApplication)
public InsuranceListApplication( IInsuranceListRepository insuranceListRepositpry, IEmployeeInsurancListDataRepository employeeInsurancListDataRepository, IInsuranceEmployeeInfoRepository insuranceEmployeeInfoRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workShopRepository, ILeftWorkInsuranceApplication leftWorkInsuranceApplication, IInsuranceEmployeeInfoApplication insuranceEmployeeInfoApplication, IEmployeeInsurancListDataApplication employeeInsurancListDataApplication, IYearlySalaryApplication yearlySalaryApplication,IYearlySalaryItemApplication yearlySalaryItemApplication ,IInsuranceWorkshopInfoRepository insuranceWorkshopInfoRepository,IInsuranceJobItemRepositpry insuranceJobItemRepository, IDateSalaryRepository dateSalaryRepository, IDateSalaryItemRepository dateSalaryItemRepository, IPersonalContractingPartyApp contractingPartyApp, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IInsuranceYearlySalaryApplication insuranceYearlySalaryApplication, ICheckoutRepository checkoutRepository)
{
// _transactionManager = transactionManager;
@@ -77,6 +79,7 @@ public class InsuranceListApplication: IInsuranceListApplication
_contractingPartyApp = contractingPartyApp;
_leftWorkInsuranceRepository = leftWorkInsuranceRepository;
_insuranceYearlySalaryApplication = insuranceYearlySalaryApplication;
_checkoutRepository = checkoutRepository;
}
public OperationResult Create(CreateInsuranceList command)
@@ -379,7 +382,7 @@ public class InsuranceListApplication: IInsuranceListApplication
var result = new MainEmployeeDetailsViewModel();
var workshopId = searchModel.WorkshopIds.FirstOrDefault();
//var employerId = _workShopRepository.GetDetails(workshopId).EmployerIdList.FirstOrDefault();
var workshop = _workShopRepository.GetDetails(workshopId);
//var isBolock = _contractingPartyApp.IsBlockByEmployerId(employerId);
var isBolock = _contractingPartyApp.IsBlockCheckByWorkshopId(workshopId);
double monthlybaseYear = 0;
@@ -388,6 +391,7 @@ public class InsuranceListApplication: IInsuranceListApplication
x.Year == searchModel.Year && x.Month == searchModel.Month &&
searchModel.WorkshopIds.Contains(x.WorkshopId)))
{
var startMonthFa = $"{searchModel.Year}/{searchModel.Month.PadLeft(2, '0')}/01";
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
DateTime endDateGr = startMonthFa.FindeEndOfMonth()
@@ -408,23 +412,67 @@ public class InsuranceListApplication: IInsuranceListApplication
_insuranceListRepositpry.GetEmployeeInsuranceDataAmonthAgo(startDateGr, workshopId);
watch.Start();
var computeResult = employeesInfoAndLeftWorks.Select(employee =>
{
var dateOfBirth = employee.DateOfBirthGr.ToFarsi();
var dateOfIssue = employee.DateOfIssueGr.ToFarsi();
var leftDate = employee.LeftWorkDateGr != null ? employee.LeftWorkDateGr.Value.AddDays(-1) : new DateTime();
{
var dateOfBirth = employee.DateOfBirthGr.ToFarsi();
var dateOfIssue = employee.DateOfIssueGr.ToFarsi();
var leftDate = employee.LeftWorkDateGr?.AddDays(-1) ?? new DateTime();
bool isManager = employee.JobId is 10 or 16 or 17 or 18 or 3498;
//آیا در کارگاه تیک محاسبه اضافه کار یا حق اولاد زده شده است؟
bool hasWorkshopOverTimeOrFamilyAllowance =
workshop.InsuranceCheckoutFamilyAllowance || workshop.InsuranceCheckoutOvertime;
//آیا پرسنل فیش حقوق دارد
//این مورد زمانی چک می شود که تیک محاسبه در کارگاه زده شده باشد
// در غیر اینصورت بصورت پیشفرض دارای فیش حقوق در نظر گرفته می شود
bool employeeHasCheckout = true;
double familyAllowance = 0;
double overTimePay = 0;
if (hasWorkshopOverTimeOrFamilyAllowance && (leftDate >= startDateGr || employee.LeftWorkDateGr == null))
{
var checkout = _checkoutRepository.HasCheckout(workshopId, employee.EmployeeId,
searchModel.Year, searchModel.Month);
if (checkout.hasChekout)
{
familyAllowance = checkout.FamilyAlloance;
overTimePay = checkout.OverTimePay;
}
else
{
employeeHasCheckout = isManager == false ? false : true;
}
}
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(employee.StartWorkDateGr, leftDate, startDateGr,endDateGr, employee.EmployeeId);
var leftWorkFa = workingDays.hasLeftWorkInMonth ? employee.LeftWorkDateGr.ToFarsi(): "";
var startWorkFa = employee.StartWorkDateGr.ToFarsi();
//به دست آوردن دستمزد روزانه با توجه به اینکه کارگاه مشاغل مقطوع است یا خیر
var dailyWage = searchModel.FixedSalary ?
Convert.ToDouble(GetDailyWageFixedSalary(searchModel.Year, workshopId, employee.EmployeeId, startDateGr, endDateGr, employee.JobId, searchModel.Population, searchModel.InsuranceJobId))
: ComputeDailyWage(yearlysaleries.DayliWage, employee.EmployeeId, workshopId, searchModel.Year);
double dailyWage = 0;
if (searchModel.FixedSalary)
{
var res = GetDailyWageFixedSalary(searchModel.Year, workshopId, employee.EmployeeId, startDateGr,
endDateGr, employee.JobId, searchModel.Population, searchModel.InsuranceJobId);
dailyWage = res ?? 0;
}
else
{
var res = ComputeDailyWage(yearlysaleries.DayliWage, employee.EmployeeId, workshopId, searchModel.Year);
dailyWage = res;
}
//بدست آوردن پایه سنوات
var baseYears = _insuranceListRepositpry.GetEmployeeInsuranceBaseYear(employee.EmployeeId, workshopId,
workingDays.countWorkingDays, startDateGr, endDateGr,workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth);
//آیا کارفرما یا مدیر عامل است؟
bool isManager = employee.JobId is 10 or 16 or 17 or 18 or 3498;
baseYears.baseYear = isManager ? 0 : baseYears.baseYear;
Console.WriteLine(employee.JobId + " - "+ baseYears.baseYear);
//جمع مزد روزانه و پایه سنوات
@@ -439,12 +487,22 @@ public class InsuranceListApplication: IInsuranceListApplication
//محاسبه مزایای ماهانه
var monthlyBenefits = GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowance, workingDays.countWorkingDays, searchModel.TypeOfInsuranceSendWorkshop, employee.JobId, employee.EmployeeId,employee.IncludeStatus);
//if (employee.EmployeeId is 7999)// سید عباس خوشکلام سلیمان
// monthlyBenefits = 80869389;
//if (employee.EmployeeId is 43787)// شهرام براهیمی سیقلان
// monthlyBenefits = 54748472;
if (workshop.InsuranceCheckoutOvertime && employeeHasCheckout && !isManager)
{
monthlyBenefits = GetRoundValue(monthlyBenefits += overTimePay);
}
//سرای ملک
// نوشین خالی
// 39692467
//if (employee.EmployeeId == 45280)
// monthlyBenefits += 39692467;
var marriedAllowanceCompute = MarriedAllowance(employee.MaritalStatus, employee.JobId, employee.IncludeStatus,
workingDays.countWorkingDays, yearlysaleries.MarriedAllowance, endOfMonth);
@@ -466,14 +524,23 @@ public class InsuranceListApplication: IInsuranceListApplication
.FirstOrDefault(e => e.EmployeeId == employee.EmployeeId);
//مزیای عیر مشمول لیست قبل
var benefitsIncludedNonContinuous =
employeeListData != null ? employeeListData.BenefitsIncludedNonContinuous : 0;
employeeListData?.BenefitsIncludedNonContinuous ?? 0;
if (workshop.InsuranceCheckoutFamilyAllowance && employeeHasCheckout && !isManager)
{
benefitsIncludedNonContinuous = GetRoundValue(benefitsIncludedNonContinuous + familyAllowance);
}
var includedAndNotIncluded = benefitsIncludedContinuous + benefitsIncludedNonContinuous;
return new EmployeeDetailsForInsuranceListViewModel
{
#region EmployeeInfo
InsuranceEmployeeInformationId = employee.InsuranceEmployeeInformationId,
EmployeeHasCheckout = employeeHasCheckout,
InsuranceEmployeeInformationId = employee.InsuranceEmployeeInformationId,
EmployeeId = employee.EmployeeId,
FName = employee.FName,
LName = employee.LName,
@@ -535,10 +602,10 @@ public class InsuranceListApplication: IInsuranceListApplication
//جمع مزایای مشمول و دستمزد ماهانه
BenefitsIncludedContinuous = benefitsIncludedContinuous,
//مزایای غیر مشمول
//مزایای غیر مشمول *
BenefitsIncludedNonContinuous = benefitsIncludedNonContinuous,
// جمع کل دستمزد و مزایای ماهانه مشمول و غیر مشمول
// جمع کل دستمزد و مزایای ماهانه مشمول و غیر مشمول *
IncludedAndNotIncluded = includedAndNotIncluded,
//حق بیمه سهم بیمه شده
@@ -559,11 +626,13 @@ public class InsuranceListApplication: IInsuranceListApplication
YearlySalaryItem = yearlysaleries.DayliWage,
MonthlyBaseYearsStr = "0",
MonthlyBaseYears = 0,
OverTimePay = overTimePay,
FamilyAllowance = familyAllowance
#endregion
};
});
}).ToList();
Console.WriteLine("New Compute : " + watch.Elapsed);
watch.Stop();
@@ -1423,6 +1492,7 @@ public class InsuranceListApplication: IInsuranceListApplication
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(employeeData.StartWorkDateGr, leftDate, startDateGr, endDateGr, employeeData.EmployeeId);
var leftWorkFa = workingDays.hasLeftWorkInMonth ? employeeData.LeftWorkDateGr.ToFarsi() : "";
var startWorkFa = employeeData.StartWorkDateGr.ToFarsi();
var workshop = _workShopRepository.GetDetails(workshopId);
//آیا کارفرما است
bool isManager = employeeData.JobId is 10 or 16 or 17 or 18 or 3498;
@@ -1432,9 +1502,53 @@ public class InsuranceListApplication: IInsuranceListApplication
// محاسبه بیمه بیکاری
var unEmploymentInsurance = (employeeData.BenefitsIncludedContinuous * 3) / 100;
//آیا در کارگاه تیک محاسبه اضافه کار یا حق اولاد زده شده است؟
//این مورد زمانی چک می شود که تیک محاسبه در کارگاه زده شده باشد
// در غیر اینصورت بصورت پیشفرض دارای فیش حقوق در نظر گرفته می شود
bool hasWorkshopOverTimeOrFamilyAllowance =
workshop.InsuranceCheckoutFamilyAllowance || workshop.InsuranceCheckoutOvertime;
bool employeeHasCheckout = true;
bool hasOverTimePay = false;
bool hasFamilyAllowance = false;
if (hasWorkshopOverTimeOrFamilyAllowance && (leftDate >= startDateGr || employeeData.LeftWorkDateGr == null))
{
var checkout = _checkoutRepository.HasCheckout(workshopId, employeeData.EmployeeId,
searchModel.Year, searchModel.Month);
if (checkout.hasChekout)
{
if (checkout.OverTimePay > 0)
hasOverTimePay = true;
if (checkout.FamilyAlloance > 0)
hasFamilyAllowance = true;
}
else
{
employeeHasCheckout = isManager == false ? false : true;
}
}
bool familyAllowanceIsSet = true;
bool overTimePayIsSet = true;
if (workshop.InsuranceCheckoutFamilyAllowance && employeeHasCheckout && employeeData.FamilyAllowance == 0 && hasFamilyAllowance && !isManager)
{
familyAllowanceIsSet = false;
}
if (workshop.InsuranceCheckoutOvertime && employeeHasCheckout && employeeData.OverTimePay == 0 && hasOverTimePay && !isManager)
{
overTimePayIsSet = false;
}
return new EmployeeDetailsForInsuranceListViewModel
{
#region EmployeeInfo
#region EmployeeInfo
EmployeeHasCheckout = employeeHasCheckout,
EmployeeInsurancListDataId = employeeData.EmployeeInsurancListDataId,
InsuranceEmployeeInformationId = employeeData.InsuranceEmployeeInformationId,
@@ -1523,6 +1637,9 @@ public class InsuranceListApplication: IInsuranceListApplication
YearlySalaryItem = yearlysaleries.DayliWage,
MonthlyBaseYearsStr = "0",
MonthlyBaseYears = 0,
OverTimeIsSet = overTimePayIsSet,
FamilyAllowanceIsSet = familyAllowanceIsSet
#endregion
@@ -1557,92 +1674,138 @@ public class InsuranceListApplication: IInsuranceListApplication
private double? GetDailyWageFixedSalary(string year, long workshopId,long employeeId,DateTime? startDateGr, DateTime? endDateGr, long jobId, string population, long? insuranceJobId)
{
double? result = 0;
//اگر مشاغل مقطوع بود و شغلش کارفرما بود
// در جدول لیست بیمه قبلی چک شود
if (jobId == 10) //کارفرما
try
{
InsuranceListSearchModel searchModel = new InsuranceListSearchModel();
var workshop = _workShopRepository.GetDetails(workshopId);
if (workshop.FixedSalary)
if (workshopId == 318 && year == "1403")
{
double percent = 0;
switch (jobId)
{
case 39:
percent = 1.75;
return 4180000;
break;
case 466:
percent = 1.6;
return 3822000;
break;
case 1192 or 398 or 8:
percent = 1.5;
return 3583000;
break;
}
//var dateSaleryviewModel = new DateSalarySearchModel();
//dateSaleryviewModel.StartDateGr = startDateGr;
//dateSaleryviewModel.EndDateGr = endDateGr;
//var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
//// && _dateSalary.Id >0
//if (_dateSalary != null)
//{
// var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
// dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
// dateSaleryItemviewModel.Percent = percent;
// var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
// if (dateSalaryItem != null)
// result = dateSalaryItem[0].Salary;
//}
}
if (jobId == 10) //کارفرما
{
InsuranceListSearchModel searchModel = new InsuranceListSearchModel();
var workshop = _workShopRepository.GetDetails(workshopId);
if (workshop.FixedSalary)
{
var inJob = _insuranceJobItemRepository
.GetInsuranceJobItemByInsuranceJobId((long)workshop.InsuranceJobId);
if (workshop.Population == "MoreThan500")
{
var max = inJob.MaxBy(x => x.PercentageMoreThan);
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageMoreThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageMoreThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
else
{
var max = inJob.MaxBy(x => x.PercentageLessThan);
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageLessThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
var max = inJob.MaxBy(x => x.PercentageLessThan);
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageLessThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
}
//var insuransList = _insuranceListRepositpry.GetInsuranceListByWorkshopIdAndYear(workshopId, year);
//var employeeInsurancListData = _employeeInsurancListDataRepository.GetEmployeeInsurancListDataByEmployeeIdAndInsuranceListId(employeeId, insuransList.Id);
//if (employeeInsurancListData != null )
//{
// result = employeeInsurancListData.DailyWage;
//}
}
else
{
var searchModel = new InsuranceJobItemSearchModel();
searchModel.InsuranceJobId = (long)insuranceJobId;
var JobItem = _insuranceJobItemRepository.GetInsuranceJobItemByInsuranceJobIdForFixedSalary((long)insuranceJobId, jobId);
if (JobItem != null && JobItem.Id != 0)
{
double percent = 0;
if (population == "MoreThan500")
percent = JobItem.PercentageMoreThan;
else if (population == "LessThan500")
percent = JobItem.PercentageLessThan;
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
// && _dateSalary.Id >0
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = percent;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
}
//var insuransList = _insuranceListRepositpry.GetInsuranceListByWorkshopIdAndYear(workshopId, year);
//var employeeInsurancListData = _employeeInsurancListDataRepository.GetEmployeeInsurancListDataByEmployeeIdAndInsuranceListId(employeeId, insuransList.Id);
//if (employeeInsurancListData != null )
//{
// result = employeeInsurancListData.DailyWage;
//}
}
else
catch (Exception)
{
var searchModel = new InsuranceJobItemSearchModel();
searchModel.InsuranceJobId = (long)insuranceJobId;
var JobItem = _insuranceJobItemRepository.GetInsuranceJobItemByInsuranceJobIdForFixedSalary((long)insuranceJobId, jobId);
if (JobItem != null && JobItem.Id != 0)
{
double percent = 0;
if (population == "MoreThan500")
percent = JobItem.PercentageMoreThan;
else if (population == "LessThan500")
percent = JobItem.PercentageLessThan;
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = percent;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
result = 0;
}
return result;
}

View File

@@ -44,6 +44,8 @@ public class InsuranceWorkshopInfoApplication: IInsuranceWorkshopInfoApplication
workshop.InsuranceJobId = workshopObj.InsuranceJobId;
workshop.InsuranceCode = workshopObj.InsuranceCode;
workshop.AgreementNumber = workshopObj.AgreementNumber;
workshop.InsuranceCheckoutOvertime = workshopObj.InsuranceCheckoutOvertime;
workshop.InsuranceCheckoutFamilyAllowance = workshopObj.InsuranceCheckoutFamilyAllowance;
return workshop;
}
else
@@ -60,6 +62,8 @@ public class InsuranceWorkshopInfoApplication: IInsuranceWorkshopInfoApplication
workshop.FixedSalary = workshopObj.FixedSalary;
workshop.Population = workshopObj.Population;
workshop.InsuranceJobId = workshopObj.InsuranceJobId;
workshop.InsuranceCheckoutOvertime = workshopObj.InsuranceCheckoutOvertime;
workshop.InsuranceCheckoutFamilyAllowance = workshopObj.InsuranceCheckoutFamilyAllowance;
return workshop;
}
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
@@ -57,6 +58,11 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
{
#region Validation
if (_leftWorkTempRepository.Exists(x=>x.WorkshopId == command.WorkshopId && x.EmployeeId == employeeId))
{
return op.Failed("برای پرسنل وارد شده قبلا درخواست ترک کار ثبت کرده اید");
}
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
{
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
@@ -233,6 +239,18 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
return op.Succcedded();
}
public async Task<List<LeftWorkTempViewModel>> GetLeftWorkTempsByEmployeeId(long employeeId)
{
return await _leftWorkTempRepository.GetLeftWorkTempsByEmployeeId(employeeId);
}
public List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId)
{
return _leftWorkTempRepository.GetLeftWorksByWorkshopId(workshopId);
}
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
{

View File

@@ -4,12 +4,14 @@ using System.Globalization;
using System.Linq;
using System.Reflection.Metadata.Ecma335;
using System.Threading.Tasks;
using System.Transactions;
using _0_Framework.Application;
using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.LoanAgg;
using Company.Domain.LoanAgg.Entities;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using CompanyManagment.App.Contracts.Loan;
using Hangfire.States;
using Microsoft.AspNetCore.Mvc.Infrastructure;
@@ -23,12 +25,16 @@ public class LoanApplication : ILoanApplication
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository;
private readonly IAuthHelper _authHelper;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
private readonly ICustomizeCheckoutApplication _customizeCheckoutApplication;
private readonly ICustomizeCheckoutTempApplication _customizeCheckoutTempApplication;
public LoanApplication(ILoanRepository loanRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IAuthHelper authHelper)
public LoanApplication(ILoanRepository loanRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IAuthHelper authHelper, ICustomizeCheckoutApplication customizeCheckoutApplication, ICustomizeCheckoutTempApplication customizeCheckoutTempApplication)
{
_loanRepository = loanRepository;
_customizeCheckoutRepository = customizeCheckoutRepository;
_authHelper = authHelper;
_customizeCheckoutApplication = customizeCheckoutApplication;
_customizeCheckoutTempApplication = customizeCheckoutTempApplication;
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
}
@@ -63,11 +69,11 @@ public class LoanApplication : ILoanApplication
return op.Failed("تاریخ شروع وام نمیتواند در گذشته باشد");
}
if (loanGrantDate>now)
if (loanGrantDate > now)
{
return op.Failed("تاریخ پرداخت وام می بایست تاریخ امروز یا قبل تر باشد");
}
if (!command.LoanGrantDate.TryToGeorgianDateTime(out var grantDate))
{
return op.Failed("تاریخ وارد شده نامعتبر است");
@@ -75,37 +81,91 @@ public class LoanApplication : ILoanApplication
if (amountD < 1000000)
return op.Failed("حداقل مبلغ وام 1.000.000 ریال میباشد");
if (_customizeCheckoutRepository.Exists(x =>
command.EmployeeIds.Contains(x.EmployeeId) && x.WorkshopId == command.WorkshopId &&
(x.ContractStart > startInstallmentDate && x.ContractStart < lastInstallment)))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است وام دهید");
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(startInstallmentDate, lastInstallment,
command.WorkshopId, command.EmployeeIds);
if (_customizeCheckoutTempRepository.Exists(x =>
command.EmployeeIds.Contains(x.EmployeeId) && x.WorkshopId == command.WorkshopId &&
(x.ContractStart >= startInstallmentDate && x.ContractStart <= lastInstallment)))
if (existsCheckouts.Checkout)
{
return op.Failed("پرسنل در بازه اقساط خود دارای فیش غیررسمی است");
return op.Failed("پرسنل در این تاریخ دارای فیش حقوقی رسمی است");
}
#endregion
var (userId, userType) = _authHelper.GetUserTypeWithId();
foreach (var employeeId in command.EmployeeIds)
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
using var transaction = new TransactionScope();
foreach (var employeeId in command.EmployeeIds)
{
var entity = new Loan(employeeId, command.WorkshopId, startInstallmentDate, command.Count.ToString(),
command.Amount.MoneyToDouble(),
installment.First().Amount.MoneyToDouble(),
installment.Select(x =>
new LoanInstallment(x.Amount.MoneyToDouble(), x.Month, x.Year, x.DateGr)).ToList()
, command.GetRounded, grantDate,userId,userType);
, command.GetRounded, grantDate, userId, userType);
_loanRepository.Create(entity);
//var existInCheckout = _customizeCheckoutApplication.ValidateExistsCheckouts(startInstallmentDate, lastInstallment,
// command.WorkshopId, [employeeId]);
//if (existInCheckout.CustomizeCheckout)
//{
// var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, employeeId,
// startInstallmentDate, lastInstallment);
// var ccRemoveResult = _customizeCheckoutApplication.GroupRemove(command.WorkshopId,
// customizeCheckouts.Select(x => x.id).ToList());
// if (!ccRemoveResult.IsSuccedded)
// return op.Failed("خطا در حذف فیش غیررسمی نهایی:"+ccRemoveResult.Message);
// var groupedCustomizeCheckouts= customizeCheckouts.GroupBy(x => new { x.Month, x.Year }).ToList();
// foreach (var groupedCustomizeCheckout in groupedCustomizeCheckouts)
// {
// var ccCreateResult = _customizeCheckoutApplication.GroupCreate(new CreateCustomizeCheckoutGroup()
// {
// WorkshopId = command.WorkshopId,
// EmployeeIds = groupedCustomizeCheckout.Select(x => x.EmployeeId).ToList(),
// MonthFa = groupedCustomizeCheckout.First().MonthInt,
// YearFa = groupedCustomizeCheckout.First().YearInt,
// });
// if (!ccCreateResult.IsSuccedded)
// return op.Failed("خطا در ایجاد فیش غیررسمی نهایی:" + ccCreateResult.Message);
// }
//}
//if (existInCheckout.CustomizeCheckoutTemp)
//{
// var customizeCheckoutsTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, employeeId,
// startInstallmentDate, lastInstallment);
// var groupedCustomizeCheckoutsTemp = customizeCheckoutsTemp.GroupBy(x => new { x.Month, x.Year}).ToList();
// foreach (var groupedCustomizeCheckout in groupedCustomizeCheckoutsTemp)
// {
// var ccCreateResult = _customizeCheckoutTempApplication.GroupCreate(new CreateCustomizeCheckoutTempGroup()
// {
// WorkshopId = command.WorkshopId,
// EmployeeIds = groupedCustomizeCheckout.Select(x=>x.EmployeeId).ToList(),
// MonthFa = groupedCustomizeCheckout.First().MonthInt,
// YearFa =
// });
// if (!ccCreateResult.IsSuccedded)
// return op.Failed("خطا در ایجاد فیش غیررسمی نهایی:" + ccCreateResult.Message);
// }
// if (!ccRemoveResult.IsSuccedded)
// return op.Failed("خطا در حذف فیش غیررسمی نهایی:" + ccRemoveResult.Message);
//}
}
_loanRepository.SaveChanges();
transaction.Complete();
return op.Succcedded();
}
@@ -117,7 +177,7 @@ public class LoanApplication : ILoanApplication
var installments = new List<LoanInstallmentViewModel>();
bool endOfMonth = day == 31;
double amountD = amount.MoneyToDouble();
@@ -171,7 +231,7 @@ public class LoanApplication : ILoanApplication
Year = loanStartDate.Substring(0, 4),
Day = loanStartDate.Substring(8, 2)
};
};
installments.Add(lastInstallment);
return installments;
}
@@ -224,7 +284,7 @@ public class LoanApplication : ILoanApplication
Year = loanStartDate.Substring(0, 4),
Day = loanStartDate.Substring(8, 2)
};
};
installments.Add(lastInstallment);
return installments;
}
@@ -273,6 +333,6 @@ public class LoanApplication : ILoanApplication
public LoanGroupedViewModel GetSearchListAsGrouped(LoanSearchViewModel searchModel)
{
return _loanRepository.GetSearchListAsGrouped(searchModel);
return _loanRepository.GetSearchListAsGrouped(searchModel);
}
}

View File

@@ -130,6 +130,7 @@ public class ProceedingSessionApplication : IProceedingSessionApplication
ArchiveNo = searchModel.File.ArchiveNo.ToString(),
FileClass = searchModel.File.FileClass,
UserId_RequesterOrSummoned = searchModel.UserId_RequesterOrSummoned,
Status = 0
});
if (searchModel.IsSearched)
@@ -230,6 +231,10 @@ public class ProceedingSessionApplication : IProceedingSessionApplication
private List<File_Board_PS> GetFile_Board_PSList(List<EditProceedingSession> list, List<FileViewModel> files, ProceedingSessionSearchModel searchModel)
{
if (list.Any(x=>x.Id == 1516))
{
}
var file_PSList = new List<File_Board_PS>();
foreach (var item in list)
@@ -248,7 +253,9 @@ public class ProceedingSessionApplication : IProceedingSessionApplication
continue;
}
var file = _fileRepository.Search(new FileSearchModel { Id = board.File_Id, Status = 0 }).FirstOrDefault();
var filelist = _fileRepository.Search(new FileSearchModel { Id = board.File_Id, Status = 0 }).ToList();
var file = filelist.FirstOrDefault();
file = _fileApplication.GetFileDetails(file);

View File

@@ -1,15 +1,13 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Transactions;
using _0_Framework.Application;
using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.RewardAgg;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using CompanyManagment.App.Contracts.Reward;
using Microsoft.AspNetCore.Components.Forms;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace CompanyManagment.Application;
@@ -19,13 +17,17 @@ public class RewardApplication : IRewardApplication
private readonly IAuthHelper _authHelper;
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
private readonly ICustomizeCheckoutApplication _customizeCheckoutApplication;
private readonly ICustomizeCheckoutTempApplication _customizeCheckoutTempApplication;
public RewardApplication(IRewardRepository rewardRepository, IAuthHelper authHelper, ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
public RewardApplication(IRewardRepository rewardRepository, IAuthHelper authHelper, ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, ICustomizeCheckoutTempApplication customizeCheckoutTempApplication, ICustomizeCheckoutApplication customizeCheckoutApplication)
{
_rewardRepository = rewardRepository;
_authHelper = authHelper;
_customizeCheckoutRepository = customizeCheckoutRepository;
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
_customizeCheckoutTempApplication = customizeCheckoutTempApplication;
_customizeCheckoutApplication = customizeCheckoutApplication;
}
public List<RewardViewModel> GetSearchList(RewardSearchModel searchModel)
@@ -34,10 +36,6 @@ public class RewardApplication : IRewardApplication
}
public EditRewardViewModel GetDetails(long id)
{
return _rewardRepository.GetDetails(id);
@@ -65,6 +63,9 @@ public class RewardApplication : IRewardApplication
}
_rewardRepository.Remove(entity);
_rewardRepository.SaveChanges();
return op.Succcedded();
@@ -105,33 +106,88 @@ public class RewardApplication : IRewardApplication
var month = Convert.ToInt32(command.GrantDate.Substring(5, 2));
var year = Convert.ToInt32(command.GrantDate.Substring(0, 4));
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month))
//if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month))
//{
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است پاداشی دهید");
//}
//if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) &&
// x.YearInt == year && x.MonthInt == month && x.ContractStart <= grantDate && x.ContractEnd >= grantDate))
//{
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است پاداشی دهید");
//}
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > grantDate)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است پاداشی دهید");
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(grantDate,
oneMonthAgoGr, command.WorkshopId, command.EmployeeIds);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد پاداشی دهید");
}
}
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) &&
x.YearInt == year && x.MonthInt == month && x.ContractStart <= grantDate && x.ContractEnd >= grantDate))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است پاداشی دهید");
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(grantDate,
grantDate, command.WorkshopId, command.EmployeeIds);
//if (existsCheckouts.Checkout)
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی رسمی صادر شده است پاداشی دهید");
#endregion
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType, _) = _authHelper.GetUserTypeWithId();
using var transaction = new TransactionScope();
foreach (var employeeId in command.EmployeeIds)
{
var entity = new Reward(employeeId, command.WorkshopId, command.Amount.MoneyToDouble(), command.Description,
userId, userType,grantDate,command.Title);
var entity = new Reward(employeeId, command.WorkshopId, command.Amount.MoneyToDouble(), command.Description,
userId, userType, grantDate, command.Title);
_rewardRepository.Create(entity);
}
_rewardRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
command.WorkshopId, employeeId,
year, month).GetAwaiter().GetResult();
if (customizeCheckouts != null)
{
_rewardRepository.SaveChanges();
var rewards = customizeCheckouts.CustomizeCheckoutRewards.ToList();
rewards.Add(new(entity.Amount.ToMoney(), entity.Description, entity.GrantDate, entity.GrantDate.ToFarsi(), entity.IsActive, entity.Title, entity.id));
customizeCheckouts.SetRewards(rewards);
}
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, grantDate).GetAwaiter().GetResult();
if (customizeCheckoutTemp != null)
{
var rewards = customizeCheckoutTemp.CustomizeCheckoutRewards.ToList();
rewards.Add(new(entity.Amount.ToMoney(), entity.Description, entity.GrantDate, entity.GrantDate.ToFarsi(), entity.IsActive, entity.Title, entity.id));
customizeCheckoutTemp.SetRewards(rewards);
}
}
}
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded();
}
public OperationResult Edit(EditRewardViewModel command)
@@ -160,34 +216,85 @@ public class RewardApplication : IRewardApplication
var month = Convert.ToInt32(command.GrantDate.Substring(5, 2));
var year = Convert.ToInt32(command.GrantDate.Substring(0, 4));
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month))
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > grantDate)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است پاداشی دهید");
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(grantDate,
oneMonthAgoGr, entity.WorkshopId, [entity.EmployeeId]);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد پاداشی دهید");
}
}
var (userId, userType) = _authHelper.GetUserTypeWithId();
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && entity.EmployeeId == x.EmployeeId &&
x.YearInt == year && x.MonthInt == month && x.ContractStart <= grantDate && x.ContractEnd >= grantDate))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است پاداشی دهید");
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(grantDate,
grantDate, entity.WorkshopId, [entity.EmployeeId]);
entity.Edit(command.Amount.MoneyToDouble(),command.Description,userId,userType, grantDate,command.Title);
using var transaction = new TransactionScope();
entity.Edit(command.Amount.MoneyToDouble(), command.Description, userId, userType, grantDate, command.Title);
_rewardRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
entity.WorkshopId, entity.EmployeeId,
year, month).GetAwaiter().GetResult();
if (customizeCheckouts != null)
{
var rewards = customizeCheckouts.CustomizeCheckoutRewards.ToList();
var existsReward = rewards.FirstOrDefault(x => x.EntityId == entity.id);
if (existsReward != null)
{
rewards.Remove(existsReward);
}
rewards.Add(new(entity.Amount.ToMoney(), entity.Description, entity.GrantDate, entity.GrantDate.ToFarsi(), entity.IsActive, entity.Title, entity.id));
customizeCheckouts.SetRewards(rewards);
}
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, entity.EmployeeId, grantDate).GetAwaiter().GetResult();
if (customizeCheckoutTemp != null)
{
var rewards = customizeCheckoutTemp.CustomizeCheckoutRewards.ToList();
var existsReward = rewards.FirstOrDefault(x => x.EntityId == entity.id);
if (existsReward != null)
{
rewards.Remove(existsReward);
}
rewards.Add(new(entity.Amount.ToMoney(), entity.Description, entity.GrantDate, entity.GrantDate.ToFarsi(), entity.IsActive, entity.Title, entity.id));
customizeCheckoutTemp.SetRewards(rewards);
}
}
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded(entity.id);
}
#region Pooya
/// <summary>
/// گروهبندی بر اساس ماه هنگام جستجو با انتخاب کارمند
/// </summary>
public RewardsGroupedViewModel GetSearchListAsGrouped(RewardSearchModel searchModel)
{
return _rewardRepository.GetSearchListAsGrouped(searchModel);
}
#endregion
/// <summary>
/// گروهبندی بر اساس ماه هنگام جستجو با انتخاب کارمند
/// </summary>
public RewardsGroupedViewModel GetSearchListAsGrouped(RewardSearchModel searchModel)
{
return _rewardRepository.GetSearchListAsGrouped(searchModel);
}
#endregion
}

View File

@@ -8,6 +8,7 @@ using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.CustomizeWorkshopSettingsAgg;
using Company.Domain.EmployeeAgg;
@@ -24,7 +25,6 @@ namespace CompanyManagment.Application;
public class RollCallApplication : IRollCallApplication
{
private readonly IRollCallRepository _rollCallRepository;
private readonly IEmployeeApplication _employeeApplication;
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
private readonly IEmployeeRepository _employeeRepository;
private readonly ILeaveRepository _leaveRepository;
@@ -33,11 +33,11 @@ public class RollCallApplication : IRollCallApplication
private readonly IRollCallDomainService _rollCallDomainService;
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository;
private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
public RollCallApplication(IRollCallRepository rollCallRepository, IEmployeeApplication employeeApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, ILeaveRepository leaveRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICheckoutRepository checkoutRepository, IRollCallDomainService rollCallDomainService, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository)
public RollCallApplication(IRollCallRepository rollCallRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, ILeaveRepository leaveRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICheckoutRepository checkoutRepository, IRollCallDomainService rollCallDomainService, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
{
_rollCallRepository = rollCallRepository;
_employeeApplication = employeeApplication;
_rollCallEmployeeRepository = rollCallEmployeeRepository;
_employeeRepository = employeeRepository;
_leaveRepository = leaveRepository;
@@ -46,7 +46,8 @@ public class RollCallApplication : IRollCallApplication
_rollCallDomainService = rollCallDomainService;
_customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
_customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository;
}
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
}
public OperationResult Create(CreateRollCall command)
{
@@ -55,7 +56,7 @@ public class RollCallApplication : IRollCallApplication
var yearFa = Convert.ToInt32(startDateFa.Substring(0, 4));
var monthFa = Convert.ToInt32(startDateFa.Substring(5, 2));
var employeeName = _employeeApplication.GetDetails(command.EmployeeId).EmployeeFullName;
var employeeName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
var create = new RollCall(command.WorkshopId, command.EmployeeId, employeeName, command.StartDate.Value, null,
yearFa, monthFa, _rollCallDomainService);
_rollCallRepository.Create(create);
@@ -336,15 +337,19 @@ public class RollCallApplication : IRollCallApplication
public OperationResult ManualEdit(CreateOrEditEmployeeRollCall command)
{
var operation = new OperationResult();
var now = DateTime.Now;
DateTime date = command.DateFa.ToGeorgianDateTime();
if (date == Tools.GetUndefinedDateTime())
return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد");
if (date >= DateTime.Now.Date)
{
return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد");
}
//if (date >= DateTime.Now.Date)
//{
// return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد");
//}
var twoDaysEarlier = date.AddDays(-2).Date;
var twoDaysLater = date.AddDays(2).Date >= DateTime.Today
@@ -407,8 +412,8 @@ public class RollCallApplication : IRollCallApplication
if (startDateTime >= endDateTime)
return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد");
if (endDateTime.Date >= DateTime.Today)
return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید");
//if (endDateTime.Date >= DateTime.Today)
// return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید");
var rollCall = new EditRollCall
{
@@ -420,7 +425,10 @@ public class RollCallApplication : IRollCallApplication
}
if (newRollCallDates.Any(x => x.StartDate >= now || x.EndDate >= now))
{
return operation.Failed("حضورغیاب وارد شده نمیتواند در آینده باشد");
}
if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate)))
return operation.Failed("بازه های وارد شده با هم تداخل دارند");
@@ -447,7 +455,7 @@ public class RollCallApplication : IRollCallApplication
{
x.ShiftDate =
_rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId,
x.StartDate!.Value,x.EndDate!.Value);
x.StartDate!.Value,x.EndDate.Value);
});
if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date))
@@ -455,15 +463,14 @@ public class RollCallApplication : IRollCallApplication
return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید از تاریخ شیفت عقب تر یا جلو تر ببرید");
}
if (new TimeSpan(newRollCallDates.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)) > TimeSpan.FromHours(26))
{
return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد");
}
if (new TimeSpan(newRollCallDates.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)) > TimeSpan.FromHours(26))
{
return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد");
}
if (newRollCallDates.Any(x => employeeRollCalls.Any(y =>
y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date &&
if (newRollCallDates.Any(x => employeeRollCalls.Any(y =>
y.ShiftDate.Date != command.DateFa.ToGeorgianDateTime().Date &&
x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value)))
return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد");
@@ -496,26 +503,33 @@ public class RollCallApplication : IRollCallApplication
_rollCallRepository.AddRange(rollCallsAsEntityModels);
_rollCallRepository.SaveChanges();
foreach (var rollCallsAsEntityModel in rollCallsAsEntityModels)
{
rollCallsAsEntityModel.ClearTimeDiff();
rollCallsAsEntityModel.SetShiftDate(_rollCallDomainService);
}
_rollCallRepository.SaveChanges();
foreach (var rollCallsAsEntityModel in rollCallsAsEntityModels)
{
rollCallsAsEntityModel.Edit(rollCallsAsEntityModel.StartDate.Value, rollCallsAsEntityModel.EndDate.Value, _rollCallDomainService);
}
_rollCallRepository.SaveChanges();
return operation.Succcedded();
}
public OperationResult ManualEditForUndefined(CreateOrEditEmployeeRollCall command)
{
var operation = new OperationResult();
var now = DateTime.Now;
DateTime date = command.DateFa.ToGeorgianDateTime();
if (date == Tools.GetUndefinedDateTime())
return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد");
if (date >= DateTime.Now.Date)
{
return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد");
}
//if (date >= DateTime.Now.Date)
//{
// return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد");
//}
var twoDaysEarlier = date.AddDays(-2).Date;
var twoDaysLater = date.AddDays(2).Date >= DateTime.Today
@@ -578,8 +592,8 @@ public class RollCallApplication : IRollCallApplication
if (startDateTime >= endDateTime)
return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد");
if (endDateTime.Date >= DateTime.Today)
return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید");
//if (endDateTime.Date >= DateTime.Today)
// return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید");
var rollCall = new EditRollCall
{
@@ -594,6 +608,12 @@ public class RollCallApplication : IRollCallApplication
{
});
if (newRollCallDates.Any(x => x.StartDate >= now || x.EndDate >= now))
{
return operation.Failed("حضورغیاب وارد شده نمیتواند در آینده باشد");
}
if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate)))
return operation.Failed("بازه های وارد شده با هم تداخل دارند");
@@ -618,7 +638,7 @@ public class RollCallApplication : IRollCallApplication
{
x.ShiftDate =
_rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId,
x.StartDate!.Value,x.EndDate!.Value);
x.StartDate!.Value,x.EndDate.Value);
});
if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date))
{
@@ -626,11 +646,11 @@ public class RollCallApplication : IRollCallApplication
}
if (new TimeSpan(newRollCallDates.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)) > TimeSpan.FromHours(26))
{
return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد");
return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد");
}
if (newRollCallDates.Any(x => employeeRollCalls.Any(y =>
y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date &&
if (newRollCallDates.Any(x => employeeRollCalls.Any(y =>
y.ShiftDate.Date != command.DateFa.ToGeorgianDateTime().Date &&
x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value)))
return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد");
@@ -659,6 +679,12 @@ public class RollCallApplication : IRollCallApplication
_rollCallRepository.AddRange(rollCallsAsEntityModels);
_rollCallRepository.SaveChanges();
foreach (var rollCallsAsEntityModel in rollCallsAsEntityModels)
{
rollCallsAsEntityModel.ClearTimeDiff();
rollCallsAsEntityModel.SetShiftDate(_rollCallDomainService);
}
_rollCallRepository.SaveChanges();
foreach (var rollCallsAsEntityModel in rollCallsAsEntityModels)
{
@@ -717,8 +743,11 @@ public class RollCallApplication : IRollCallApplication
if (rollCalls == null)
return operation.Failed("چنین آیتمی یافت نشد");
foreach (var item in rollCalls)
foreach (var item in rollCalls)
{
item.Edit(item.StartDate.Value,item.EndDate.Value,_rollCallDomainService);
item.SetModifyType(RollCallModifyType.EditByEmployer);
}
_rollCallRepository.SaveChanges();
@@ -756,4 +785,56 @@ public class RollCallApplication : IRollCallApplication
{
return _rollCallRepository.CheckRepeat(employeeId, workshopId);
}
public OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
{
var operationResult = new OperationResult();
try
{
List<DateTime> fromDates = commands.Select(x => x.FromDate.ToGeorgianDateTime()).ToList();
var employeeIds = commands.Select(x => x.EmployeeId).ToList();
if (_checkoutRepository.Exists(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId) && fromDates.Any(a => a <= x.ContractEnd)))
{
return operationResult.Failed("پرسنل بعد از تاریخ وارد شده دارای فیش رسمی است");
}
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId) && fromDates.Any(a => a <= x.ContractEnd)))
{
return operationResult.Failed("پرسنل بعد از تاریخ وارد شده دارای فیش غیررسمی نهایی است");
}
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId) && fromDates.Any(a => a <= x.ContractEnd)))
{
return operationResult.Failed("پرسنل بعد از تاریخ وارد شده دارای فیش غیررسمی موقت است");
}
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
var allRollCalls = _rollCallRepository
.GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(),
oldestDate).GetAwaiter().GetResult();
foreach (var command in commands)
{
var rollCalls = allRollCalls
.Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
foreach (var rollCall in rollCalls)
{
rollCall.ClearTimeDiff();
_rollCallRepository.SaveChanges();
rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
}
}
_rollCallRepository.SaveChanges();
return operationResult.Succcedded();
}
catch (Exception e)
{
return operationResult.Failed(e.Message);
}
}
}

View File

@@ -90,15 +90,28 @@ namespace CompanyManagment.Application
public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
{
//موقت
// دادمهرگستر 11 *
//585 کاشی گالری سرامیس (بابک ابراهیمی ) *
//آموزشگاه ملل 604 *
//کاریابی ملل 605 *
//368 پیتزا امیر آماده سازی
//367 پیتزا امیر رستوران
//286 مرکز توان بخشی رسالت *
bool skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
//موقت
// دادمهرگستر 11 *
//585 کاشی گالری سرامیس (بابک ابراهیمی )
//آموزشگاه ملل 604 *
//کاریابی ملل 605 *
//368 پیتزا امیر آماده سازی
//367 پیتزا امیر رستوران
//286 مرکز توان بخشی رسالت *
//610 بیمارستان پارس - رازقی طعام
DateTime start1404 = new DateTime(2025, 03, 21);
bool skipRollCallByWorkshopId = false;
if (contractStart < start1404)
{
skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
}
else
{
skipRollCallByWorkshopId = workshopId is 368 or 367 or 585 or 610;
}
//#if DEBUG
// skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367;
@@ -111,7 +124,10 @@ namespace CompanyManagment.Application
bool skipRollCallByEmployeeId = employeeId is 42550;
if (skipRollCallByEmployeeId)
return false;
//9211 محسا تازه
if (employeeId == 9211 && contractStart >= start1404)
return false;
var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);

View File

@@ -3,6 +3,7 @@ using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.RollCall;
using CompanyManagment.App.Contracts.WorkingHoursTemp;
using System;
using System.Threading.Tasks;
namespace CompanyManagment.Application;
@@ -20,8 +21,14 @@ public class RollCallMandatoryApplication : IRollCallMandatoryApplication
return _rollCallMandatoryRepository.Exists(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date);
}
public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking)
public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout)
{
return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking);
return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout);
}
public async Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd,
string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command, bool holidayWorking)
{
return await _rollCallMandatoryRepository.RotatingShiftReport(workshopId, employeeId, contractStart, contractEnd, shiftwork,hasRollCall, command, holidayWorking);
}
}

View File

@@ -7,11 +7,14 @@ using Company.Domain.CheckoutAgg;
using CompanyManagment.App.Contracts.Checkout;
using System;
using System.Threading.Tasks;
using System.Transactions;
using Company.Domain.CustomizeCheckoutAgg;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using CompanyManagment.App.Contracts.Reward;
using OfficeOpenXml.Drawing.Chart;
using CompanyManagment.EFCore.Migrations;
namespace CompanyManagment.Application;
@@ -22,14 +25,18 @@ public class SalaryAidApplication : ISalaryAidApplication
private readonly IEmployeeRepository _employeeRepository;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
private readonly IAuthHelper _authHelper;
private readonly ICustomizeCheckoutApplication _customizeCheckoutApplication;
private readonly ICustomizeCheckoutTempApplication _customizeCheckoutTempApplication;
public SalaryAidApplication(ISalaryAidRepository salaryAidRepository, ICustomizeCheckoutRepository customizeCheckoutRepository,
IEmployeeRepository employeeRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IAuthHelper authHelper)
IEmployeeRepository employeeRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IAuthHelper authHelper, ICustomizeCheckoutApplication customizeCheckoutApplication, ICustomizeCheckoutTempApplication customizeCheckoutTempApplication)
{
_salaryAidRepository = salaryAidRepository;
_customizeCheckoutRepository = customizeCheckoutRepository;
_authHelper = authHelper;
_customizeCheckoutApplication = customizeCheckoutApplication;
_customizeCheckoutTempApplication = customizeCheckoutTempApplication;
_employeeRepository = employeeRepository;
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
}
@@ -48,44 +55,95 @@ public class SalaryAidApplication : ISalaryAidApplication
public OperationResult Create(CreateSalaryAidViewModel command)
{
var op = new OperationResult();
if (!command.SalaryDateTime.TryToGeorgianDateTime(out var startDate))
{
return op.Failed("تاریخ وارد شده نامعتبر است");
}
var calculationDate = $"{command.CalculationYear:0000}/{command.CalculationMonth:00}/01";
if (!calculationDate.TryToGeorgianDateTime(out var calculationDateGr))
{
return op.Failed("تاریخ محاسبه وارد شده نامعتبر است");
}
if (startDate > DateTime.Now)
{
return op.Failed("تاریخ پرداخت مساعده می بایست تاریخ امروز یا قبل تر باشد");
}
if (command.Amount.Length > 15)
{
return op.Failed("مبلغ وارد شده معتبر نیست");
}
var month = Convert.ToInt32(command.SalaryDateTime.Substring(5, 2));
var year = Convert.ToInt32(command.SalaryDateTime.Substring(0, 4));
var month = Convert.ToInt32(command.CalculationMonth);
var year = Convert.ToInt32(command.CalculationYear);
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month))
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > calculationDateGr)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است مساعده ای دهید");
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
oneMonthAgoGr, command.WorkshopId, command.EmployeeIds);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد مساعده دهید");
}
}
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) &&
x.YearInt == year && x.MonthInt == month && x.ContractStart <= startDate && x.ContractEnd >= startDate))
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است مساعده ای دهید");
}
var (userId, userType) = _authHelper.GetUserTypeWithId();
foreach (var employeeId in command.EmployeeIds)
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
calculationDateGr, command.WorkshopId, command.EmployeeIds);
//if (existsCheckouts.Checkout)
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی رسمی صادر شده است مساعده ای دهید");
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
using var transaction = new TransactionScope();
foreach (var employeeId in command.EmployeeIds)
{
var entity = new SalaryAid(employeeId, command.WorkshopId, command.Amount.MoneyToDouble(), startDate,userId,userType);
var entity = new SalaryAid(employeeId, command.WorkshopId, command.Amount.MoneyToDouble(), startDate,userId,userType,command.CalculationMonth,command.CalculationYear);
_salaryAidRepository.Create(entity);
_salaryAidRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
command.WorkshopId, employeeId,
year, month).GetAwaiter().GetResult();
if (customizeCheckouts != null)
{
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckouts.SetSalaryAids(salaryAids);
}
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
if (customizeCheckoutTemp != null)
{
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
}
}
_salaryAidRepository.SaveChanges();
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded();
}
@@ -98,6 +156,12 @@ public class SalaryAidApplication : ISalaryAidApplication
return op.Failed("تاریخ وارد شده نامعتبر است");
}
var calculationDate = $"{command.CalculationYear:0000}/{command.CalculationMonth:00}/01";
if (!calculationDate.TryToGeorgianDateTime(out var calculationDateGr))
{
return op.Failed("تاریخ محاسبه وارد شده نامعتبر است");
}
if (startDate > DateTime.Now)
{
return op.Failed("تاریخ پرداخت مساعده می بایست تاریخ امروز یا قبل تر باشد");
@@ -111,21 +175,78 @@ public class SalaryAidApplication : ISalaryAidApplication
if (entity == null)
return op.Failed("چنین مساعده ای وجود ندارد");
var month = Convert.ToInt32(command.SalaryDateTime.Substring(5, 2));
var year = Convert.ToInt32(command.SalaryDateTime.Substring(0, 4));
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == entity.WorkshopId && entity.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month))
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است مساعده ای دهید");
var month = Convert.ToInt32(command.CalculationMonth);
var year = Convert.ToInt32(command.CalculationYear);
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) &&
x.YearInt == year && x.MonthInt == month && x.ContractStart <= startDate && x.ContractEnd >= startDate))
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
if (oneMonthAgoGr > calculationDateGr)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است مساعده ای دهید");
}
var (userId, userType) = _authHelper.GetUserTypeWithId();
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
oneMonthAgoGr, entity.WorkshopId, [entity.EmployeeId]);
entity.Edit(Tools.MoneyToDouble(command.Amount),startDate,userId,userType);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد مساعده ای دهید");
}
}
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
calculationDateGr, entity.WorkshopId, [entity.EmployeeId]);
//if (existsCheckouts.Checkout)
// return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی رسمی صادر شده است مساعده ای دهید");
using var transaction = new TransactionScope();
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
entity.Edit(Tools.MoneyToDouble(command.Amount),startDate,userId,userType,command.CalculationMonth,command.CalculationYear);
_salaryAidRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
entity.WorkshopId, entity.EmployeeId,
year, month).GetAwaiter().GetResult();
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
var existsSalaryAid = salaryAids.FirstOrDefault(x => x.EntityId == entity.id);
if (existsSalaryAid != null)
{
salaryAids.Remove(existsSalaryAid);
}
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(),
entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckouts.SetSalaryAids(salaryAids);
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
entity.WorkshopId, entity.EmployeeId, calculationDateGr).GetAwaiter().GetResult();
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
var existsSalaryAid = salaryAids.FirstOrDefault(x => x.EntityId == entity.id);
if (existsSalaryAid != null)
{
salaryAids.Remove(existsSalaryAid);
}
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(),
entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
return op.Succcedded();
}
@@ -136,15 +257,15 @@ public class SalaryAidApplication : ISalaryAidApplication
if (entity == null)
return op.Failed("این آیتم وجود ندارد");
var month = Convert.ToInt32(entity.SalaryAidDateTime.ToFarsi().Substring(5, 2));
var year = Convert.ToInt32(entity.SalaryAidDateTime.ToFarsi().Substring(0, 4));
var month = Convert.ToInt32(entity.CalculationDate.ToFarsi().Substring(5, 2));
var year = Convert.ToInt32(entity.CalculationDate.ToFarsi().Substring(0, 4));
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == entity.WorkshopId && entity.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month))
return op.Failed("این پرسنل در این تاریخ دارای فیش حقوقی است");
if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == entity.WorkshopId && entity.EmployeeId == x.EmployeeId &&
x.YearInt == year && x.MonthInt == month && x.ContractStart <= entity.SalaryAidDateTime && x.ContractEnd >= entity.SalaryAidDateTime))
x.YearInt == year && x.MonthInt == month && x.ContractStart <= entity.CalculationDate && x.ContractEnd >= entity.CalculationDate))
{
return op.Failed("این پرسنل در این تاریخ دارای فیش حقوقی موقت است");
}
@@ -164,9 +285,10 @@ public class SalaryAidApplication : ISalaryAidApplication
}
public async Task<OperationResult> CreateRange(List<CreateSalaryAidViewModel> commands)
public OperationResult CreateRange(List<CreateSalaryAidViewModel> commands)
{
var op = new OperationResult();
using var transaction = new TransactionScope();
foreach (var command in commands)
{
@@ -174,6 +296,11 @@ public class SalaryAidApplication : ISalaryAidApplication
{
return op.Failed("تاریخ وارد شده نامعتبر است");
}
var calculationDate = $"{command.CalculationYear:0000}/{command.CalculationMonth:00}/01";
if (!calculationDate.TryToGeorgianDateTime(out var calculationDateGr))
{
return op.Failed("تاریخ محاسبه وارد شده نامعتبر است");
}
if (startDate > DateTime.Now)
{
@@ -184,17 +311,30 @@ public class SalaryAidApplication : ISalaryAidApplication
{
return op.Failed("مبلغ وارد شده معتبر نیست");
}
_ = DateTime.Now.Date.AddMonthsFa(-1, out var oneMonthAgoGr);
var month = Convert.ToInt32(command.SalaryDateTime.Substring(5, 2));
var year = Convert.ToInt32(command.SalaryDateTime.Substring(0, 4));
if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month))
if (oneMonthAgoGr > calculationDateGr)
{
return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است مساعده ای دهید");
var prevCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
oneMonthAgoGr, command.WorkshopId, command.EmployeeIds);
if (prevCheckouts.CustomizeCheckout || prevCheckouts.Checkout || prevCheckouts.CustomizeCheckoutTemp)
{
return op.Failed("شما نمیتوانید در تاریخ قبل از یک ماه گذشته که فیش صادر شده باشد مساعده دهید");
}
}
var (userId, userType) = _authHelper.GetUserTypeWithId();
foreach (var employeeId in command.EmployeeIds)
var existsCheckouts = _customizeCheckoutRepository.ValidateExistsCheckouts(calculationDateGr,
calculationDateGr, command.WorkshopId, command.EmployeeIds);
var month = Convert.ToInt32(command.CalculationMonth);
var year = Convert.ToInt32(command.CalculationYear);
var (userId, userType,_) = _authHelper.GetUserTypeWithId();
foreach (var employeeId in command.EmployeeIds)
{
var id = employeeId;
if (employeeId == 0)
@@ -203,11 +343,44 @@ public class SalaryAidApplication : ISalaryAidApplication
id = employee.id;
}
var entity = new SalaryAid(id, command.WorkshopId, command.Amount.MoneyToDouble(), startDate, userId, userType);
await _salaryAidRepository.CreateAsync(entity);
var entity = new SalaryAid(id, command.WorkshopId, command.Amount.MoneyToDouble(), startDate, userId, userType, command.CalculationMonth, command.CalculationYear);
_salaryAidRepository.Create(entity);
_salaryAidRepository.SaveChanges();
if (existsCheckouts.CustomizeCheckout)
{
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
command.WorkshopId, employeeId,
year, month).GetAwaiter().GetResult();
if (customizeCheckouts != null)
{
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckouts.SetSalaryAids(salaryAids);
}
}
if (existsCheckouts.CustomizeCheckoutTemp)
{
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
if (customizeCheckoutTemp != null)
{
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime, entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
}
}
_customizeCheckoutRepository.SaveChanges();
}
await _salaryAidRepository.SaveChangesAsync();
transaction.Complete();
return op.Succcedded();
}
#region Pooya
@@ -219,6 +392,6 @@ public class SalaryAidApplication : ISalaryAidApplication
return _salaryAidRepository.GetSearchListAsGrouped(searchModel);
}
#endregion
}

View File

@@ -67,7 +67,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
return op.Failed("شماره همراه نا معتبر است");
#endregion
@@ -141,6 +141,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
result.FName = createTemp.FName;
result.LName = createTemp.LName;
result.DateOfBirthFa = dateOfBirth;
result.FatherName = createTemp.FatherName;
result.IdNumberSerial = createTemp.IdNumberSerial;
result.IdNumber = idNumber;
return op.Succcedded(result);
@@ -188,7 +190,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public async Task<OperationResult> CreateOrUpdateWorkshopTemp(List<WorkshopTempViewModel> command)
public async Task<OperationResult> CreateOrUpdateWorkshopTemp(List<WorkshopTempViewModel> command, long contractingPartyTempId)
{
var op = new OperationResult();
var updateWorkshopList = command.Where(x => x.Id > 0).ToList();
@@ -196,10 +198,17 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (updateWorkshopList.Count == 0 && createNewWorkshopList.Count == 0)
return op.Failed("هیچ مجموعه ای ایجاد نشده است");
var oldWorkshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId);
#region Update
if (updateWorkshopList.Count > 0)
{
var updateListIds = updateWorkshopList.Select(x => x.Id).ToList();
var oldWorkshopsIds = oldWorkshops.Select(x => x.Id).ToList();
var exceptWorkshops = oldWorkshopsIds.Except(updateListIds).ToList();
if (exceptWorkshops.Any())
await _workshopTempRepository.RemoveWorkshopTemps(exceptWorkshops);
foreach (var workshop in updateWorkshopList)
{
@@ -212,6 +221,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
workshop.RollCall == false && workshop.Insurance == false)
op.Failed($"برای مجموعه {workshop.WorkshopName} هیچ سرویسی انتخاب نشده است");
var existWorkshops = _workshopTempRepository.Get(workshop.Id);
if (existWorkshops != null)
{
if (workshop.ContractAndCheckout)
@@ -256,6 +266,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (workshop.CustomizeCheckout)
await _workshopServicesTempRepository.CreateAsync(
new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, workshop.Id));
await _workshopServicesTempRepository.SaveChangesAsync();
}
}
@@ -324,6 +336,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (workshop.CustomizeCheckout)
await _workshopServicesTempRepository.CreateAsync(
new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, createNewWorkshopTemp.id));
await _workshopServicesTempRepository.SaveChangesAsync();
}
}
@@ -352,8 +366,9 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
public async Task<ReviewAndPaymentViewModel> GetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime")
public async Task<ReviewAndPaymentViewModel> GetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime", string contractStartType = "currentMonth")
{
//دریافت کارگاه ها
var workshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId);
@@ -380,9 +395,10 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
_ => 12,
};
//رند کردن مبالغ کارگاه ها
var roundAmount = (int)(totalPayment1MonthDouble / 1000000) * 1000000;
var roundAmount = (((Convert.ToInt64(totalPayment1MonthDouble))) / 1000000) * 1000000;
double roundAmount2 = roundAmount;
//بدست آوردن جمع کل مبالغ کارگاه بر اساس مدت قراداد
result.SumOfWorkshopsPaymentDouble = roundAmount * months;
result.SumOfWorkshopsPaymentDouble = months * roundAmount2;
result.SumOfWorkshopsPaymentPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney();
@@ -394,31 +410,112 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
//مالیات
result.ValueAddedTaxDouble = tenPercent;
result.ValueAddedTaxSt = tenPercent.ToMoney();
if (paymentModel == "OneTime")//تخفیف 10 درصدی درصورت پرداخت یکجا
//پرداخت یکجا
#region OneTimePaymentResult
double discountOneTimePeyment = result.SumOfWorkshopsPaymentDouble - tenPercent;
//مبلغ بدون مالیات و با تخفیف
result.OneTimeWithoutTaxPaymentDouble = discountOneTimePeyment;
result.OneTimeWithoutTaxPaymentStr = discountOneTimePeyment.ToMoney();
//مبلغ با مالیات
result.OneTimeTotalPaymentDouble = discountOneTimePeyment + tenPercent;
result.OneTimeTotalPaymentStr = result.OneTimeTotalPaymentDouble.ToMoney();
#endregion
//پرداخت ماهیانه
#region MonthlyPaymentResult
//مبلغ بدون مالیات
result.MonthlyWithoutTaxPaymentDouble = result.SumOfWorkshopsPaymentDouble;
result.MonthlyWithoutTaxPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney();
// مبلغ با مالیات
result.MonthlyTotalPaymentDouble = result.SumOfWorkshopsPaymentDouble + tenPercent;
result.MonthlyTotalPaymentStr = result.MonthlyTotalPaymentDouble.ToMoney();
var installmentList = new List<MonthlyInstallment>();
var startDate = (DateTime.Now).ToFarsi();
result.ContractStartCurrentMonthFa = $"{startDate.Substring(0, 8)}01";
result.ContractStartCurrentMonthGr = result.ContractStartCurrentMonthFa.ToGeorgianDateTime();
startDate = result.ContractStartCurrentMonthFa;
result.ContractStartNextMonthGr = ((startDate.FindeEndOfMonth()).ToGeorgianDateTime()).AddDays(1);
result.ContractStartNextMonthFa = result.ContractStartNextMonthGr.ToFarsi();
if (contractStartType == "nextMonth")
startDate = result.ContractStartNextMonthFa;
var findeEnd = Tools.FindEndOfContract(startDate, periodModel);
var contractEndDate = findeEnd.endDateGr;
result.ContractEndGr = contractEndDate;
result.ContractEndFa = contractEndDate.ToFarsi();
if (periodModel == "1")
{
double discountOneTimePeyment = result.SumOfWorkshopsPaymentDouble - tenPercent;
installmentList.Add(new MonthlyInstallment()
{
InstallmentAmountStr = result.MonthlyTotalPaymentStr,
InstallmentCounter = "سررسید پرداخت اول",
InstalmentDate = (DateTime.Now).ToFarsi()
//مبلغ بدون مالیات و با تخفیف
result.WithoutTaxPaymentDouble = discountOneTimePeyment;
result.WithoutTaxPaymentStr = discountOneTimePeyment.ToMoney();
//مبلغ با مالیات
result.TotalPaymentDouble = discountOneTimePeyment + tenPercent;
result.TotalPaymentStr = result.TotalPaymentDouble.ToMoney();
});
result.MonthlyInstallments = installmentList;
}
else
{
//مبلغ بدون مالیات
result.WithoutTaxPaymentDouble = result.SumOfWorkshopsPaymentDouble;
result.WithoutTaxPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney();
int instalmentCount = Convert.ToInt32(periodModel);
var instalmentAmount = result.MonthlyTotalPaymentDouble / instalmentCount;
var findEndOfMonth = startDate.FindeEndOfMonth();
for (int i = 1; i <= instalmentCount; i++)
{
if (i == 1)
{
startDate = (DateTime.Now).ToFarsi();
}
else if (i > 1)
{
var currentMonthStart = ((findEndOfMonth.ToGeorgianDateTime()).AddDays(1)).ToFarsi();
startDate = currentMonthStart.FindeEndOfMonth();
findEndOfMonth = startDate;
}
installmentList.Add(new MonthlyInstallment()
{
InstallmentAmountStr = instalmentAmount.ToMoney(),
InstallmentCounter = i switch
{
1 => "سررسید پرداخت اول",
2 => "سررسید پرداخت دوم",
3 => "سررسید پرداخت سوم",
4 => "سررسید پرداخت چهارم",
5 => "سررسید پرداخت پنجم",
6 => "سررسید پرداخت ششم",
7 => "سررسید پرداخت هفتم",
8 => "سررسید پرداخت هشتم",
9 => "سررسید پرداخت نهم",
10 => "سررسید پرداخت دهم",
11 => "سررسید پرداخت یازدهم",
12 => "سررسید پرداخت دوازدهم",
_ => "سررسید پرداخت دوازدهم",
},
InstalmentDate = startDate
});
}
// مبلغ با مالیات
result.TotalPaymentDouble = result.SumOfWorkshopsPaymentDouble + tenPercent;
result.TotalPaymentStr = result.TotalPaymentDouble.ToMoney();
}
#endregion
result.MonthlyInstallments = installmentList;
result.ContractingPartTempId = contractingPartyTempId;
return result;
@@ -430,19 +527,21 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
public async Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax)
public async Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax, DateTime contractStart)
{
var op = new OperationResult();
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
var contractStartDate = contractStart;
string contractStartFa = contractStart.ToFarsi();
var findeEnd = Tools.FindEndOfContract(contractStartFa, periodModel);
var contractEndDate = findeEnd.endDateGr;
if (institutionContractTemp == null)
{
var periodModelInt = Convert.ToInt32(periodModel);
var contractstart = DateTime.Now;
var contractEnd = DateTime.Now.AddMonths(periodModelInt);
var create = new InstitutionContractTemp(contractingPartyTempId,paymentModel,periodModel,totalPayment,contractstart,contractEnd,"official", valueAddedTax,"", "BeforeSendVerifyCode", 0,null,null);
var create = new InstitutionContractTemp(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractStartDate, contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null);
_institutionContractTempRepository.Create(create);
_institutionContractTempRepository.SaveChanges();
return op.Succcedded();
@@ -451,20 +550,20 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
{
if (institutionContractTemp.VerifyCodeEndTime != null)
{
var spaning = (institutionContractTemp.VerifyCodeEndTime.Value - DateTime.Now);
var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value);
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent" && spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0))
return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید");
}
if (institutionContractTemp.RegistrationStatus == "Completed")
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
var periodModelInt = Convert.ToInt32(periodModel);
var contractstart = DateTime.Now;
var contractEnd = DateTime.Now.AddMonths(periodModelInt);
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractstart, contractEnd, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null);
update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractStartDate, contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null);
_institutionContractTempRepository.SaveChanges();
return op.Succcedded();
}
@@ -483,14 +582,14 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
{
var op = new OperationResult();
var institutionContractTemp = await
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
return op.Failed(ظا");
return op.Failed(طا");
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
if (institutionContractTemp.RegistrationStatus == "BeforeSendVerifyCode")
@@ -516,26 +615,29 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
return op.Succcedded(1, "کد برای شما پیامک شد");
}
}
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent")
{
var spaning = (institutionContractTemp.VerifyCodeEndTime.Value - DateTime.Now);
if ((spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0)))
if (DateTime.Now < institutionContractTemp.VerifyCodeEndTime.Value)
return op.Failed("کد دریافت شده را وارد کنید");
var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value);
if ((spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0)))
return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید");
if ((spaning > new TimeSpan(0, 0, 0) && spaning > new TimeSpan(0, 1, 0)))
if ((spaning > new TimeSpan(0, 1, 0)))
{
//ساخت کد شش رقمی
Random generator = new Random();
String code = generator.Next(1, 1000000).ToString("D6");
//ارسال اس ام اس
var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId);
var sendResult =await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code);
var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code);
if(!sendResult.IsSuccedded)
if (!sendResult.IsSuccedded)
return op.Failed($"{sendResult.Message}");
@@ -544,16 +646,16 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
//ذخیره تاریخ ارسال و مهلت پایان
//ذخیره آیدی پیامک
//تغییر وضعیت به ارسال شده
if (update != null)
{
update.Update(code, "VerifyCodeSent",sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2));
update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2));
_institutionContractTempRepository.SaveChanges();
return op.Succcedded(1, "کد برای شما پیامک شد");
}
}
}
@@ -580,25 +682,25 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
return op.Failed("خظا");
if(institutionContractTemp.RegistrationStatus != "VerifyCodeSent")
if (institutionContractTemp.RegistrationStatus != "VerifyCodeSent")
return op.Failed("خطا");
if(institutionContractTemp.VerifyCodeEndTime < DateTime.Now)
if (institutionContractTemp.VerifyCodeEndTime < DateTime.Now)
return op.Failed("کد شما منقضی شده است");
if(institutionContractTemp.SendVerifyCodeTime < DateTime.Now && institutionContractTemp.VerifyCodeEndTime >= DateTime.Now)
if (institutionContractTemp.SendVerifyCodeTime < DateTime.Now && institutionContractTemp.VerifyCodeEndTime >= DateTime.Now)
{
if (institutionContractTemp.VerifyCode == verifyCode)
{
return op.Succcedded();
}
else
{
return op.Failed("کد وارد شده صحیح نیست");
}
}

Some files were not shown because too many files have changed in this diff Show More