Compare commits
509 Commits
Custom-Che
...
Feature/In
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b2fd137e4 | |||
| 2098e843a5 | |||
| f6b6dfa046 | |||
|
|
c948498307 | ||
| f35aca8e44 | |||
| 16d45c6dc4 | |||
| 45e746b194 | |||
| e3b6d5f1c9 | |||
| 7c1fe65cf2 | |||
| f26fcba165 | |||
|
|
de2a6203df | ||
|
|
2208834a0e | ||
| de52a0be98 | |||
|
|
5bebec3fde | ||
|
|
cad808d73c | ||
| abef053f56 | |||
| 6469bf5a50 | |||
|
|
4fd5ef52ef | ||
|
|
61e2bdaaf5 | ||
| 8ab22d9948 | |||
|
|
17b5f5fee5 | ||
| 9e7e4ca655 | |||
|
|
100c9367ed | ||
| fdb6799c65 | |||
|
|
c81da3e787 | ||
|
|
d8c0471878 | ||
|
|
8418c2edc4 | ||
|
|
e109a41b90 | ||
|
|
158fc91a67 | ||
|
|
d1fb6e933d | ||
|
|
0811482370 | ||
| 24982e11d3 | |||
| 394d65db31 | |||
| 59deae29c2 | |||
|
|
46833f93da | ||
|
|
8d78ea548a | ||
|
|
ffbadc5a96 | ||
| e889b61d27 | |||
| b492aa39e8 | |||
| 2201ade168 | |||
|
|
baeeec183b | ||
|
|
3142a80b44 | ||
|
|
7c2354b386 | ||
|
|
175158a3d7 | ||
|
|
b79abcb175 | ||
|
|
7388fd8a81 | ||
|
|
a9c489b43d | ||
|
|
66ada45d29 | ||
|
|
04e51fe3b5 | ||
|
|
e486f20a5a | ||
|
|
2db6a9695c | ||
|
|
cea68fce49 | ||
|
|
3f2c0c5531 | ||
|
|
22f13aea0b | ||
| 0ec62e5e83 | |||
|
|
86a3a21d5b | ||
|
|
e02bc9adc5 | ||
|
|
39bc95731e | ||
|
|
759792b44b | ||
|
|
1409d30dfd | ||
|
|
ad9f747027 | ||
|
|
b021636913 | ||
|
|
3007a87104 | ||
|
|
d7eb8517f7 | ||
|
|
eaaab56421 | ||
|
|
7d763715cd | ||
|
|
7d1eb780a5 | ||
|
|
3e1758d35c | ||
|
|
88a9a62dd3 | ||
|
|
7bcc052ec6 | ||
|
|
6fd9b336a9 | ||
|
|
44d5225ff3 | ||
|
|
03e4f7e8c1 | ||
|
|
2c6512faa2 | ||
|
|
406212a1f0 | ||
|
|
53e93bd410 | ||
|
|
19f109254d | ||
|
|
9311d68a91 | ||
|
|
9e91214941 | ||
|
|
aded6b2839 | ||
|
|
08d40ae299 | ||
|
|
659f647b31 | ||
|
|
0ddcb3653a | ||
|
|
3e3eccf0f0 | ||
|
|
22d7c49379 | ||
|
|
ca7e46907c | ||
|
|
ed7e6a3dee | ||
|
|
40482e167a | ||
|
|
3807b213bb | ||
| 2719639333 | |||
|
|
3aa6c6d1ed | ||
|
|
0112772d3f | ||
|
|
7eb8255215 | ||
|
|
3650caabfa | ||
|
|
faac2bf707 | ||
|
|
f04749043e | ||
|
|
e8a9a674a1 | ||
|
|
d8b6b0f5e8 | ||
|
|
3058f95e0e | ||
|
|
8fa8c33415 | ||
|
|
9393993755 | ||
|
|
4d81de755e | ||
|
|
f02aa4e217 | ||
|
|
6cce3f5321 | ||
|
|
59112d9635 | ||
|
|
987c1b51fa | ||
|
|
5e186a2352 | ||
|
|
f68739cc22 | ||
|
|
db8bb247b3 | ||
|
|
9cc3bb07f1 | ||
|
|
4fd71690d5 | ||
|
|
8078d8bfdd | ||
|
|
3b38b80a28 | ||
|
|
0cd8d5b4cf | ||
|
|
4b23448cc1 | ||
|
|
aeebb983a4 | ||
|
|
43c56aa4a1 | ||
|
|
349c374ca3 | ||
|
|
c81cafa228 | ||
|
|
2fffa67ff6 | ||
|
|
c0e438aa6d | ||
|
|
acb6764271 | ||
|
|
c0f9fb6389 | ||
|
|
e17ca40df6 | ||
|
|
abc8f408a7 | ||
|
|
fc43e97cc4 | ||
|
|
eeea868c05 | ||
|
|
b8937ef79c | ||
|
|
789b0fbc24 | ||
|
|
65ce181001 | ||
|
|
140adb2588 | ||
|
|
afb07aa90f | ||
|
|
ee2adf1c13 | ||
|
|
986092135f | ||
|
|
ab2c1124ca | ||
|
|
bc36d8e151 | ||
|
|
f7f44b98fb | ||
|
|
b8e831ce4d | ||
|
|
8aa8ffe8c8 | ||
|
|
5a8bccb98f | ||
|
|
3c73a277ce | ||
|
|
56def568b5 | ||
|
|
f4961a46eb | ||
|
|
ffa728d05d | ||
|
|
75da32167e | ||
|
|
d99e69fa5b | ||
|
|
30c70c83b2 | ||
|
|
d90e01d733 | ||
|
|
ec0996f53c | ||
|
|
5f71cf829b | ||
|
|
da738054df | ||
|
|
521aa9b6ee | ||
|
|
bb2802002a | ||
|
|
2049d8b2eb | ||
|
|
2c6a39bf67 | ||
|
|
88a0552a07 | ||
|
|
429b9aad27 | ||
|
|
60052f6cd2 | ||
|
|
c7ac3ac7cb | ||
|
|
48f7a7f975 | ||
|
|
e0793bc300 | ||
|
|
541f60d6cd | ||
|
|
0aebb8c498 | ||
|
|
601511ef77 | ||
|
|
020b46f911 | ||
|
|
ac1bb05515 | ||
|
|
2a8d2d5581 | ||
|
|
71c55cd779 | ||
|
|
3c8f212825 | ||
|
|
73feb3dd78 | ||
|
|
8d175920d5 | ||
|
|
6857ba6bc1 | ||
|
|
a9c2f09f9e | ||
|
|
22b722e3dc | ||
|
|
c168843afc | ||
|
|
1b7af456b0 | ||
|
|
51291d6de7 | ||
|
|
97ac0e440c | ||
|
|
586f0a29c2 | ||
|
|
a620872de1 | ||
|
|
cebb525968 | ||
|
|
666964609d | ||
|
|
5ef277d604 | ||
|
|
802f9a39c5 | ||
|
|
8cc26936cd | ||
|
|
b0293bf25c | ||
|
|
5b97f79fbd | ||
|
|
a9c5c8f8ca | ||
|
|
9e60c12212 | ||
|
|
ff339b9eee | ||
|
|
86c7113987 | ||
|
|
552ee74d56 | ||
|
|
d1e5adf96f | ||
|
|
fbf367677c | ||
|
|
612dd99bfe | ||
|
|
8e8e9ef5de | ||
|
|
1e18fe1067 | ||
|
|
d1aef862cf | ||
|
|
fb2f7ba7c1 | ||
|
|
fc18985334 | ||
|
|
92d36f2966 | ||
|
|
0c6a8821ac | ||
|
|
4b9d39f1e7 | ||
|
|
5daa36cfb5 | ||
|
|
9e5e7b57c7 | ||
|
|
a6984e5f1b | ||
|
|
fe8eb5d92b | ||
|
|
24e661252c | ||
|
|
e7d5716317 | ||
|
|
a6be044dbb | ||
|
|
c91f7e7a90 | ||
|
|
42de15b3db | ||
|
|
ffcfb4ea3f | ||
|
|
a49e2dbb75 | ||
|
|
d8cd33732a | ||
|
|
5aa714e81d | ||
|
|
62502fcede | ||
|
|
6eec454685 | ||
|
|
4022a1afd8 | ||
|
|
86cd776c4d | ||
|
|
13cad28356 | ||
|
|
9cdb922aa1 | ||
|
|
6699909b2f | ||
|
|
718a7d42b7 | ||
|
|
9637b6a581 | ||
|
|
ec29d3b869 | ||
|
|
4648113a28 | ||
|
|
f4f6fd1bf6 | ||
|
|
d9b7245cee | ||
|
|
85bec9d7fb | ||
|
|
f93d0b7e89 | ||
|
|
f8f7e7d3cf | ||
|
|
e159738b3d | ||
|
|
ebde36ad8d | ||
|
|
6f160a85ab | ||
|
|
ebaef13c4d | ||
|
|
a29e148753 | ||
|
|
625200bed1 | ||
|
|
4e81b6a2ef | ||
|
|
e03aabf88b | ||
|
|
d1158b95cb | ||
|
|
dbc73509b5 | ||
|
|
b6ac3073d3 | ||
|
|
9592960a40 | ||
|
|
01f06530c7 | ||
|
|
4ec4935a1d | ||
|
|
e423df6fbb | ||
|
|
7bc7cd3422 | ||
|
|
dec934214d | ||
|
|
dd922a72d5 | ||
|
|
76f32c5c38 | ||
|
|
8f015aa124 | ||
|
|
1a8886be50 | ||
|
|
cf6f677816 | ||
|
|
366d42dec9 | ||
|
|
5bce350701 | ||
|
|
d322f2b8db | ||
|
|
cd83ca4379 | ||
|
|
edc017b4d4 | ||
|
|
4a0153e1e8 | ||
|
|
7f9a2ac597 | ||
|
|
f9298e1320 | ||
|
|
ce088fc432 | ||
|
|
3e02cd711f | ||
|
|
64dffd6d25 | ||
|
|
ffdc71401e | ||
|
|
21f8a399b4 | ||
|
|
cad2c152e5 | ||
|
|
247e2f2069 | ||
|
|
cb845afdf6 | ||
|
|
530a263fd8 | ||
|
|
aba8960b1d | ||
|
|
e2ba7d9450 | ||
|
|
a316b2a5f1 | ||
|
|
4b045440c4 | ||
| 10c35f6f10 | |||
|
|
af30c7f088 | ||
|
|
d95ca28cd4 | ||
|
|
89a8e1c027 | ||
|
|
e584605c4e | ||
|
|
734699b319 | ||
|
|
e8407868a7 | ||
| 7ad1a2f376 | |||
| e190408504 | |||
| e520c8c14b | |||
| bd0e79fadf | |||
|
|
b880721dfa | ||
|
|
e0a68690c1 | ||
|
|
dbb0b2e53a | ||
|
|
7f900755be | ||
|
|
dc39f30c21 | ||
|
|
8dd9ee508a | ||
|
|
9f42af6a23 | ||
|
|
4449195aed | ||
|
|
817a848eef | ||
|
|
f77fa7a324 | ||
|
|
e44dad08ef | ||
|
|
f901f8a682 | ||
|
|
08913d38f2 | ||
|
|
15156c06fc | ||
|
|
5da9d23875 | ||
|
|
c14da7ad5b | ||
|
|
1629b121d3 | ||
|
|
3a60ddf449 | ||
|
|
c90fe4cb29 | ||
|
|
57930aae4f | ||
|
|
d816e73fed | ||
|
|
10bfbad3cb | ||
|
|
671f6be87a | ||
|
|
2901a9ecf4 | ||
|
|
aff835fd7f | ||
|
|
7055839538 | ||
|
|
2166e7c5ee | ||
|
|
d4dc65b4e8 | ||
| 38dd1b1818 | |||
|
|
8c5b21b726 | ||
|
|
77d9c42823 | ||
|
|
214882108c | ||
|
|
98a8bef754 | ||
|
|
ececd99d07 | ||
|
|
8cb39f4a55 | ||
|
|
d54e3c4a67 | ||
|
|
4e8a7d74a2 | ||
|
|
d1414b0b90 | ||
|
|
aeb65dc152 | ||
|
|
e69525b1ad | ||
|
|
47c53ce116 | ||
|
|
fe7a70e9db | ||
|
|
f7db92c4a7 | ||
|
|
d257711d16 | ||
|
|
7ab83c73aa | ||
|
|
6aefe7e88c | ||
|
|
a3533234f1 | ||
|
|
5dae65cad1 | ||
|
|
c5c79a9629 | ||
|
|
aad033731a | ||
|
|
949c9dd34e | ||
|
|
d0406b2bbe | ||
|
|
cb8741faf9 | ||
|
|
649bf5338a | ||
|
|
3896b3cec1 | ||
|
|
4064d5fdf8 | ||
|
|
fc200e53f1 | ||
|
|
f2f8571b44 | ||
|
|
52e1d0a78b | ||
|
|
b5affa43c1 | ||
|
|
6b7c3730ad | ||
|
|
b627311d73 | ||
|
|
9cc62d76c2 | ||
|
|
6422218409 | ||
|
|
9eb9c0d49a | ||
|
|
cc740439ec | ||
|
|
ff15307160 | ||
|
|
f2a2afc7a4 | ||
|
|
fe2a70bf60 | ||
|
|
d52141f729 | ||
|
|
1915dc0565 | ||
|
|
4cc0e72136 | ||
|
|
535e3943eb | ||
|
|
e8efb0a579 | ||
|
|
8800af7647 | ||
|
|
8ec9f5daef | ||
|
|
e625ed9a6e | ||
|
|
39ffd52107 | ||
|
|
6dbf6c2008 | ||
|
|
00a85e54ee | ||
|
|
f5195ecaa2 | ||
|
|
aaa3618522 | ||
|
|
9376c2cca6 | ||
|
|
36480df2f5 | ||
|
|
60db153dfe | ||
|
|
4ffdf14de2 | ||
|
|
fa587c61eb | ||
|
|
7e35f8009a | ||
|
|
13080fd64c | ||
|
|
39eb401575 | ||
|
|
bcd6447509 | ||
|
|
ac46886922 | ||
|
|
252c601eb4 | ||
|
|
4f673f22d5 | ||
|
|
d4a80f5b87 | ||
|
|
0c73ac44e8 | ||
|
|
059624ff9f | ||
|
|
a792936d66 | ||
|
|
a99e1cef32 | ||
|
|
408a78fb27 | ||
|
|
6f7eb05047 | ||
|
|
03ee772974 | ||
|
|
a0cab667c4 | ||
|
|
53ece03000 | ||
|
|
3354e0343c | ||
|
|
811d8c023c | ||
|
|
c561a138d6 | ||
|
|
d03f19a51e | ||
|
|
d4f56b2d82 | ||
|
|
de54e609c8 | ||
|
|
a4bdd55161 | ||
|
|
a43e32fa04 | ||
|
|
4801fcfd89 | ||
|
|
4eb7e8eaf5 | ||
|
|
caa887cd04 | ||
|
|
baededb717 | ||
|
|
a14595a961 | ||
|
|
7911109c64 | ||
|
|
67b2d3ab55 | ||
|
|
090a47fc70 | ||
|
|
d39dc5047f | ||
|
|
ecfae75010 | ||
|
|
ad8896a12c | ||
|
|
d46e8b5de5 | ||
|
|
51a4e5c1fe | ||
|
|
b6a581c456 | ||
|
|
3e914b7b1d | ||
|
|
40f021197b | ||
| 0303f04ae3 | |||
| 3e56d31ff2 | |||
| d5d0634807 | |||
|
|
a950c3130d | ||
|
|
85f493bcbb | ||
|
|
b8a82f783c | ||
|
|
e2d06d8f7e | ||
|
|
44a0a2df86 | ||
|
|
ee5e608581 | ||
|
|
6583706db6 | ||
| 1449e83a0f | |||
| bf5f416470 | |||
| 6526aefbbf | |||
|
|
1fec40982c | ||
|
|
868abae2e8 | ||
|
|
c627ba6d3d | ||
|
|
dadf541dd1 | ||
| 4b0c700b3e | |||
| 677adbeddb | |||
|
|
caaace7bcc | ||
|
|
c6142b684e | ||
|
|
ef5f80ba91 | ||
|
|
cac3d47c32 | ||
|
|
e2e0171564 | ||
| d139a36fba | |||
|
|
a9655d6df5 | ||
| e0bdde8264 | |||
| 67111fff6b | |||
| ef4c9ee201 | |||
| b621a709aa | |||
|
|
1f96f0bc87 | ||
|
|
aa8eac6923 | ||
|
|
1707c90072 | ||
| 9bd85fc22e | |||
|
|
f2b03cc34f | ||
|
|
7f14c14589 | ||
|
|
80486a5f3a | ||
|
|
9ff7fc7a90 | ||
| 99bfb472b0 | |||
|
|
21b209b83a | ||
| a4aff718dc | |||
|
|
14f54149ea | ||
|
|
3e2c7df38b | ||
|
|
cc11dcfde7 | ||
| bc6f817c34 | |||
| d2d629d750 | |||
|
|
0a2b6b33d6 | ||
|
|
43b68a3e88 | ||
|
|
8f9d0ecffb | ||
| e73672e114 | |||
|
|
c62a16a25f | ||
|
|
f5aef7c7cc | ||
|
|
60c60a9e17 | ||
|
|
9311c7bfc7 | ||
|
|
f6a710dc03 | ||
|
|
db47f8f354 | ||
|
|
9deb0ca4c6 | ||
|
|
c99e242caa | ||
|
|
f5a767abc4 | ||
|
|
5389d58fbd | ||
|
|
e5450dffa7 | ||
|
|
870184310f | ||
|
|
a2de24a72a | ||
|
|
be9051d8b0 | ||
|
|
ebb1d3dd61 | ||
|
|
2879d75ae8 | ||
|
|
79cfad0c13 | ||
|
|
bf94e9c76d | ||
|
|
44d5af811b | ||
|
|
f85e040750 | ||
|
|
b81c5163e5 | ||
|
|
961720e896 | ||
|
|
56993da86b | ||
|
|
a11532f2bd | ||
|
|
330a663bd1 | ||
|
|
ad3ef5699c | ||
|
|
424acb9661 | ||
|
|
e0fcdc612b | ||
|
|
7e2f691bb3 | ||
|
|
f105e21ef7 | ||
|
|
5b3b073223 | ||
|
|
1acd218f77 | ||
|
|
d32b6a10c0 | ||
|
|
a4546366aa | ||
|
|
2f8e2ff44c | ||
|
|
b088e0d8ec | ||
|
|
604007e087 | ||
|
|
180d17b254 | ||
|
|
a60e0bd211 | ||
|
|
6b543b4627 | ||
|
|
8222f8be4a | ||
|
|
1c89068557 | ||
|
|
c7a99f7ca0 | ||
|
|
d7d938dfcc | ||
|
|
89a01b5948 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -359,5 +359,6 @@ MigrationBackup/
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
# # Fody - auto-generated XML schema
|
||||
# FodyWeavers.xsd
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
||||
<PackageReference Include="PersianTools.Core" Version="2.0.4" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="9.0.0" />
|
||||
|
||||
<PackageReference Include="MD.PersianDateTime.Standard" Version="2.5.0" />
|
||||
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -12,65 +12,65 @@ namespace _0_Framework.Application;
|
||||
|
||||
public class AuthHelper : IAuthHelper
|
||||
{
|
||||
private readonly IHttpContextAccessor _contextAccessor;
|
||||
|
||||
public AuthHelper(IHttpContextAccessor contextAccessor)
|
||||
{
|
||||
_contextAccessor = contextAccessor;
|
||||
}
|
||||
private readonly IHttpContextAccessor _contextAccessor;
|
||||
|
||||
public AuthViewModel CurrentAccountInfo()
|
||||
{
|
||||
var result = new AuthViewModel();
|
||||
if (!IsAuthenticated())
|
||||
return result;
|
||||
public AuthHelper(IHttpContextAccessor contextAccessor)
|
||||
{
|
||||
_contextAccessor = contextAccessor;
|
||||
}
|
||||
|
||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||
result.ProfilePhoto = claims.FirstOrDefault(x => x.Type == "ProfilePhoto")?.Value;
|
||||
result.RoleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value);
|
||||
result.Fullname = claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
|
||||
result.Role = claims.FirstOrDefault(x => x.Type == "RoleName")?.Value;
|
||||
result.ClientAriaPermission =claims.FirstOrDefault(x => x.Type == "ClientAriaPermission").Value;
|
||||
result.AdminAreaPermission = claims.FirstOrDefault(x => x.Type == "AdminAreaPermission").Value;
|
||||
result.PositionValue = !string.IsNullOrWhiteSpace(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) ? int.Parse(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) : 0;
|
||||
result.WorkshopList = Tools.DeserializeFromBsonList<WorkshopClaim>(claims.FirstOrDefault(x => x is { Type: "workshopList" })?.Value);
|
||||
result.WorkshopSlug = claims.FirstOrDefault(x => x is { Type: "WorkshopSlug" }).Value;
|
||||
result.Mobile = claims.FirstOrDefault(x => x is { Type: "Mobile" }).Value;
|
||||
public AuthViewModel CurrentAccountInfo()
|
||||
{
|
||||
var result = new AuthViewModel();
|
||||
if (!IsAuthenticated())
|
||||
return result;
|
||||
|
||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||
result.ProfilePhoto = claims.FirstOrDefault(x => x.Type == "ProfilePhoto")?.Value;
|
||||
result.RoleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value);
|
||||
result.Fullname = claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
|
||||
result.Role = claims.FirstOrDefault(x => x.Type == "RoleName")?.Value;
|
||||
result.ClientAriaPermission = claims.FirstOrDefault(x => x.Type == "ClientAriaPermission").Value;
|
||||
result.AdminAreaPermission = claims.FirstOrDefault(x => x.Type == "AdminAreaPermission").Value;
|
||||
result.PositionValue = !string.IsNullOrWhiteSpace(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) ? int.Parse(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) : 0;
|
||||
result.WorkshopList = Tools.DeserializeFromBsonList<WorkshopClaim>(claims.FirstOrDefault(x => x is { Type: "workshopList" })?.Value);
|
||||
result.WorkshopSlug = claims.FirstOrDefault(x => x is { Type: "WorkshopSlug" }).Value;
|
||||
result.Mobile = claims.FirstOrDefault(x => x is { Type: "Mobile" }).Value;
|
||||
result.SubAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId").Value);
|
||||
result.WorkshopName = claims.FirstOrDefault(x => x is { Type: "WorkshopName" })?.Value;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public List<int> GetPermissions()
|
||||
{
|
||||
if (!IsAuthenticated())
|
||||
return new List<int>();
|
||||
public List<int> GetPermissions()
|
||||
{
|
||||
if (!IsAuthenticated())
|
||||
return new List<int>();
|
||||
|
||||
var permissions = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "permissions")
|
||||
?.Value;
|
||||
return Tools.DeserializeFromBsonList<int>(permissions); //Mahan
|
||||
}
|
||||
var permissions = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "permissions")
|
||||
?.Value;
|
||||
return Tools.DeserializeFromBsonList<int>(permissions); //Mahan
|
||||
}
|
||||
|
||||
public long CurrentAccountId()
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value)
|
||||
: 0;
|
||||
}
|
||||
public long CurrentSubAccountId()
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "SubAccountId")?.Value)
|
||||
: 0;
|
||||
}
|
||||
public long CurrentAccountId()
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value)
|
||||
: 0;
|
||||
}
|
||||
public long CurrentSubAccountId()
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "SubAccountId")?.Value)
|
||||
: 0;
|
||||
}
|
||||
public string CurrentAccountMobile()
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "Mobile")?.Value
|
||||
: "";
|
||||
}
|
||||
{
|
||||
return IsAuthenticated()
|
||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "Mobile")?.Value
|
||||
: "";
|
||||
}
|
||||
|
||||
#region Vafa
|
||||
|
||||
@@ -111,157 +111,166 @@ public class AuthHelper : IAuthHelper
|
||||
}
|
||||
|
||||
public string GetWorkshopSlug()
|
||||
{
|
||||
return CurrentAccountInfo().ClientAriaPermission == "true"
|
||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopSlug")?.Value
|
||||
: "";
|
||||
}
|
||||
public string GetWorkshopName()
|
||||
{
|
||||
var workshopName = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ClientAriaPermission")?.Value == "true";
|
||||
if (workshopName)
|
||||
{
|
||||
return _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopName")?.Value;
|
||||
}
|
||||
{
|
||||
return CurrentAccountInfo().ClientAriaPermission == "true"
|
||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopSlug")?.Value
|
||||
: "";
|
||||
}
|
||||
public string GetWorkshopName()
|
||||
{
|
||||
var workshopName = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ClientAriaPermission")?.Value == "true";
|
||||
if (workshopName)
|
||||
{
|
||||
return _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopName")?.Value;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
public string CurrentAccountRole()
|
||||
{
|
||||
if (IsAuthenticated())
|
||||
return _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value;
|
||||
return null;
|
||||
}
|
||||
{
|
||||
if (IsAuthenticated())
|
||||
return _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value;
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool IsAuthenticated()
|
||||
{
|
||||
return _contextAccessor.HttpContext.User.Identity.IsAuthenticated;
|
||||
//var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
//if (claims.Count > 0)
|
||||
// return true;
|
||||
//return false;
|
||||
//return claims.Count > 0;
|
||||
}
|
||||
public bool IsAuthenticated()
|
||||
{
|
||||
return _contextAccessor.HttpContext.User.Identity.IsAuthenticated;
|
||||
//var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
//if (claims.Count > 0)
|
||||
// return true;
|
||||
//return false;
|
||||
//return claims.Count > 0;
|
||||
}
|
||||
|
||||
public void Signin(AuthViewModel account)
|
||||
{
|
||||
#region MahanChanges
|
||||
public void Signin(AuthViewModel account)
|
||||
{
|
||||
#region MahanChanges
|
||||
|
||||
var permissions = account.Permissions is { Count: > 0 } ? Tools.SerializeToBson(account.Permissions) : "";
|
||||
var workshopBson = account.WorkshopList is { Count: > 0 } ? Tools.SerializeToBson(account.WorkshopList) : "";
|
||||
var slug = account.WorkshopSlug ?? "";
|
||||
if (account.Id == 322)
|
||||
account.Permissions.AddRange([3060301, 30603, 30604, 30605]);
|
||||
|
||||
#endregion
|
||||
var permissions = account.Permissions is { Count: > 0 } ? Tools.SerializeToBson(account.Permissions) : "";
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new Claim("AccountId", account.Id.ToString()),
|
||||
new Claim(ClaimTypes.Name, account.Fullname),
|
||||
new Claim(ClaimTypes.Role, account.RoleId.ToString()),
|
||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
||||
|
||||
|
||||
var workshopBson = account.WorkshopList is { Count: > 0 } ? Tools.SerializeToBson(account.WorkshopList) : "";
|
||||
var slug = account.WorkshopSlug ?? "";
|
||||
|
||||
#endregion
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new Claim("AccountId", account.Id.ToString()),
|
||||
new Claim(ClaimTypes.Name, account.Fullname),
|
||||
new Claim(ClaimTypes.Role, account.RoleId.ToString()),
|
||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
||||
new Claim("permissions", permissions),
|
||||
new Claim("Mobile", account.Mobile),
|
||||
new Claim("ProfilePhoto", account.ProfilePhoto ),
|
||||
new Claim("RoleName", account.RoleName),
|
||||
new Claim("SubAccountId", account.SubAccountId.ToString()),
|
||||
new Claim("Mobile", account.Mobile),
|
||||
new Claim("ProfilePhoto", account.ProfilePhoto ),
|
||||
new Claim("RoleName", account.RoleName),
|
||||
new Claim("SubAccountId", account.SubAccountId.ToString()),
|
||||
new Claim("AdminAreaPermission", account.AdminAreaPermission.ToString()),
|
||||
new Claim("ClientAriaPermission", account.ClientAriaPermission.ToString()),
|
||||
new Claim("IsCamera", "false"),
|
||||
new Claim("PositionValue",account.PositionValue.ToString()),
|
||||
new Claim("ClientAriaPermission", account.ClientAriaPermission.ToString()),
|
||||
new Claim("IsCamera", "false"),
|
||||
new Claim("PositionValue",account.PositionValue.ToString()),
|
||||
//mahanChanges
|
||||
new("workshopList",workshopBson),
|
||||
new("WorkshopSlug",slug),
|
||||
new("WorkshopName",account.WorkshopName??"")
|
||||
new("WorkshopSlug",slug),
|
||||
new("WorkshopName",account.WorkshopName??"")
|
||||
|
||||
};
|
||||
|
||||
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
|
||||
var authProperties = new AuthenticationProperties
|
||||
{
|
||||
ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1)
|
||||
};
|
||||
var authProperties = new AuthenticationProperties
|
||||
{
|
||||
ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1)
|
||||
};
|
||||
|
||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
}
|
||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
}
|
||||
|
||||
#region Camera
|
||||
public void CameraSignIn(CameraAuthViewModel account)
|
||||
{
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new Claim("AccountId", account.Id.ToString()),
|
||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
||||
#region Camera
|
||||
public void CameraSignIn(CameraAuthViewModel account)
|
||||
{
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new Claim("AccountId", account.Id.ToString()),
|
||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
||||
new Claim("WorkshopId", account.WorkshopId.ToString()),
|
||||
new Claim("WorkshopName", account.WorkshopName),
|
||||
new Claim("Mobile", account.Mobile),
|
||||
new Claim("AccountId", account.AccountId.ToString()),
|
||||
new Claim("IsActiveString", account.IsActiveString),
|
||||
new Claim("IsCamera", "true"),
|
||||
new Claim("WorkshopName", account.WorkshopName),
|
||||
new Claim("Mobile", account.Mobile),
|
||||
new Claim("AccountId", account.AccountId.ToString()),
|
||||
new Claim("IsActiveString", account.IsActiveString),
|
||||
new Claim("IsCamera", "true"),
|
||||
|
||||
};
|
||||
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
};
|
||||
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
|
||||
var authProperties = new AuthenticationProperties
|
||||
{
|
||||
var authProperties = new AuthenticationProperties
|
||||
{
|
||||
|
||||
//ExpiresUtc = DateTimeOffset.UtcNow.AddDays(30)
|
||||
ExpiresUtc = new DateTimeOffset(year: 2100, month: 1, day: 1, hour: 0, minute: 0, second: 0, offset: TimeSpan.Zero)
|
||||
};
|
||||
//ExpiresUtc = DateTimeOffset.UtcNow.AddDays(30)
|
||||
ExpiresUtc = new DateTimeOffset(year: 2100, month: 1, day: 1, hour: 0, minute: 0, second: 0, offset: TimeSpan.Zero)
|
||||
};
|
||||
|
||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
}
|
||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
}
|
||||
|
||||
public CameraAuthViewModel CameraAccountInfo()
|
||||
{
|
||||
var result = new CameraAuthViewModel();
|
||||
if (!IsAuthenticated())
|
||||
return result;
|
||||
public CameraAuthViewModel CameraAccountInfo()
|
||||
{
|
||||
var result = new CameraAuthViewModel();
|
||||
if (!IsAuthenticated())
|
||||
return result;
|
||||
|
||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||
result.WorkshopId = long.Parse(claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value);
|
||||
result.WorkshopName = claims.FirstOrDefault(x => x.Type == "WorkshopName").Value;
|
||||
result.Mobile = claims.FirstOrDefault(x => x.Type == "Mobile").Value;
|
||||
result.AccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId")?.Value);
|
||||
result.IsActiveString = claims.FirstOrDefault(x => x.Type == "IsActiveString").Value;
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||
result.WorkshopId = long.Parse(claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value);
|
||||
result.WorkshopName = claims.FirstOrDefault(x => x.Type == "WorkshopName").Value;
|
||||
result.Mobile = claims.FirstOrDefault(x => x.Type == "Mobile").Value;
|
||||
result.AccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId")?.Value);
|
||||
result.IsActiveString = claims.FirstOrDefault(x => x.Type == "IsActiveString").Value;
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void SignOut()
|
||||
{
|
||||
_contextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
}
|
||||
public void SignOut()
|
||||
{
|
||||
_contextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
}
|
||||
|
||||
|
||||
#region Pooya
|
||||
#region Pooya
|
||||
|
||||
public (long Id, UserType userType) GetUserTypeWithId()
|
||||
{
|
||||
if (!IsAuthenticated())
|
||||
return (0, UserType.Anonymous);
|
||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||
public (long Id, UserType userType, long roleId) GetUserTypeWithId()
|
||||
{
|
||||
if (!IsAuthenticated())
|
||||
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);
|
||||
var subAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId")?.Value ?? "0");
|
||||
if (subAccountId > 0)
|
||||
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 id = long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value);
|
||||
if (claims.FirstOrDefault(x => x.Type == "AdminAreaPermission")?.Value == "true")
|
||||
{
|
||||
var roleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value ?? "0");
|
||||
return (id, UserType.Admin, roleId);
|
||||
}
|
||||
|
||||
return (id, UserType.Client);
|
||||
}
|
||||
#endregion
|
||||
return (id, UserType.Client, 0);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
@@ -3,5 +3,6 @@
|
||||
public enum Gender
|
||||
{
|
||||
Male,
|
||||
Female
|
||||
Female,
|
||||
None
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -4,5 +4,5 @@ public enum IsActive
|
||||
{
|
||||
False,
|
||||
True,
|
||||
|
||||
None
|
||||
}
|
||||
@@ -51,4 +51,11 @@ public class OperationResult<T>
|
||||
Message = message;
|
||||
return this;
|
||||
}
|
||||
public OperationResult<T> Failed(string message, T data)
|
||||
{
|
||||
IsSuccedded = false;
|
||||
Message = message;
|
||||
Data = data;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,24 @@ public interface ISmsService
|
||||
void Send(string number, string message);
|
||||
bool VerifySend(string number, string message);
|
||||
bool LoginSend(string number, string message);
|
||||
/// <summary>
|
||||
/// ارسال کد به کلاینت برای تکمیل فرایند ثبت نام
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="code"></param>
|
||||
/// <returns></returns>
|
||||
Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code);
|
||||
bool SendAccountsInfo(string number,string fullName, string userName);
|
||||
Task<ApiResultViewModel> GetByMessageId(int messId);
|
||||
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);
|
||||
string DeliveryStatus(byte? dv);
|
||||
string DeliveryColorStatus(byte? dv);
|
||||
string UnixTimeStampToDateTime(int? unixTimeStamp);
|
||||
|
||||
#region Mahan
|
||||
|
||||
Task<double> GetCreditAmount();
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
32
0_Framework/Application/Sms/SentSmsViewModel.cs
Normal file
32
0_Framework/Application/Sms/SentSmsViewModel.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
namespace _0_Framework.Application;
|
||||
|
||||
public class SentSmsViewModel
|
||||
{
|
||||
public SentSmsViewModel()
|
||||
{
|
||||
IsSuccedded = false;
|
||||
}
|
||||
|
||||
public bool IsSuccedded { get; set; }
|
||||
public string Message { get; set; }
|
||||
public byte StatusCode { get; set; }
|
||||
public int MessageId { get; set; }
|
||||
|
||||
public SentSmsViewModel Succedded(byte statusCode, string message, int messageId)
|
||||
{
|
||||
IsSuccedded = true;
|
||||
Message = message;
|
||||
StatusCode = statusCode;
|
||||
MessageId = messageId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SentSmsViewModel Failed(byte statusCode, string message, int messageId)
|
||||
{
|
||||
IsSuccedded = false;
|
||||
Message = message;
|
||||
StatusCode = statusCode;
|
||||
MessageId = messageId;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ using IPE.SmsIrClient;
|
||||
using IPE.SmsIrClient.Models.Requests;
|
||||
using IPE.SmsIrClient.Models.Results;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
|
||||
namespace _0_Framework.Application.Sms;
|
||||
@@ -16,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)
|
||||
@@ -110,6 +115,31 @@ public class SmsService : ISmsService
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
|
||||
{
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var result = new SentSmsViewModel();
|
||||
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
|
||||
|
||||
var sendResult = await smsIr.VerifySendAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
|
||||
Thread.Sleep(2000);
|
||||
|
||||
if (sendResult.Message == "موفق")
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
return result.Succedded(status, message, messaeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
return result.Failed(status, message, messaeId);
|
||||
}
|
||||
}
|
||||
|
||||
public bool SendAccountsInfo(string number, string fullName, string userName)
|
||||
{
|
||||
|
||||
@@ -285,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
|
||||
}
|
||||
|
||||
@@ -14,14 +14,24 @@ 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 - صادق فرخی
|
||||
/// 3 - میلاد مصباح
|
||||
/// 380 - افروز نظری
|
||||
/// 381 - مهدی قربانی
|
||||
/// 392 - عمار حسن دوست
|
||||
/// </summary>
|
||||
public static List<long> StaticAccountIds = [2, 3, 380, 381];
|
||||
public static List<long> StaticAccountIds = [2, 3, 380, 381, 392];
|
||||
|
||||
/// <summary>
|
||||
/// این تاریخ در جدول اکانت لفت ورک به این معنیست
|
||||
|
||||
@@ -37,10 +37,12 @@
|
||||
/// </summary>
|
||||
public const int PersonnelStatusIndividualReportPermissionCode = 10205;
|
||||
|
||||
/// <summary>
|
||||
/// لیست کل پرسنل
|
||||
/// </summary>
|
||||
public const int PersonnelListPermissionCode = 10206;
|
||||
|
||||
//کد 10206 به بخش عملیات پرسنل منتقل شد و رزرو می باشد
|
||||
///// <summary>
|
||||
///// لیست کل پرسنل
|
||||
///// </summary>
|
||||
//public const int PersonnelListPermissionCode = 10206;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -72,11 +74,22 @@
|
||||
/// </summary>
|
||||
public const int PaymentToEmployeePermissionCode = 10304;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// عملیات حساب بانکی پرسنل
|
||||
/// </summary>
|
||||
public const int EmployeeBankInformationPermissionCode = 10309;
|
||||
|
||||
/// <summary>
|
||||
/// عملیات افزودن پرسنل
|
||||
/// </summary>
|
||||
public const int AddEmployeePermissionCode = 10310;
|
||||
|
||||
/// <summary>
|
||||
/// عملیات افزودن پرسنل
|
||||
/// </summary>
|
||||
public const int LeftWorkEmployeePermissionCode = 10311;
|
||||
|
||||
/// <summary>
|
||||
/// ایجاد وام
|
||||
/// </summary>
|
||||
@@ -190,6 +203,12 @@
|
||||
public const int DeleteFinePermissionCode = 1030804;
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// لیست کل پرسنل
|
||||
/// </summary>
|
||||
public const int PersonnelListPermissionCode = 10206;
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -366,11 +385,27 @@
|
||||
/// </summary>
|
||||
public const int SetWorkshopWorkingHoursPermissionCode = 10606;
|
||||
|
||||
#region حساب کاربری دوربین
|
||||
|
||||
/// <summary>
|
||||
/// تنظیمات حساب کاربری دوربین
|
||||
/// </summary>
|
||||
public const int CameraAccountSettingsPermissionCode = 10607;
|
||||
|
||||
/// <summary>
|
||||
/// فعال/غیرفعال اکانت دوربین
|
||||
/// </summary>
|
||||
public const int CameraAccountActivationBtnPermissionCode = 1060701;
|
||||
|
||||
/// <summary>
|
||||
/// ویرایش اکانت دوربین
|
||||
/// </summary>
|
||||
public const int CameraAccountEditPermissionCode = 1060702;
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region کارپوشه
|
||||
@@ -562,13 +597,7 @@
|
||||
Code = PersonnelStatusIndividualReportPermissionCode,
|
||||
ParentId = WorkshopOperationsPermissionCode
|
||||
};
|
||||
public static SubAccountPermissionDto PersonnelListPermission { get; } = new()
|
||||
{
|
||||
Id = PersonnelListPermissionCode,
|
||||
Name = "لیست کل پرسنل",
|
||||
Code = PersonnelListPermissionCode,
|
||||
ParentId = WorkshopOperationsPermissionCode
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
#region عملیات پرسنل, ParentId = PersonnelOperationsPermissionCode
|
||||
@@ -613,12 +642,35 @@
|
||||
ParentId = PersonnelOperationsPermissionCode
|
||||
};
|
||||
|
||||
#endregion
|
||||
public static SubAccountPermissionDto AddEmployeeInformationPermission { get; } = new()
|
||||
{
|
||||
Id = AddEmployeePermissionCode,
|
||||
Name = "عملیات افزودن پرسنل",
|
||||
Code = AddEmployeePermissionCode,
|
||||
ParentId = PersonnelOperationsPermissionCode
|
||||
};
|
||||
|
||||
#region فیش حقوقی غیر رسمی,ParentId = CustomizeCheckoutOperationsPermissionCode
|
||||
public static SubAccountPermissionDto LeftWorkEmployeeInformationPermission { get; } = new()
|
||||
{
|
||||
Id = LeftWorkEmployeePermissionCode,
|
||||
Name = "عملیات ترک کار پرسنل",
|
||||
Code = LeftWorkEmployeePermissionCode,
|
||||
ParentId = PersonnelOperationsPermissionCode
|
||||
};
|
||||
|
||||
public static SubAccountPermissionDto PersonnelListPermission { get; } = new()
|
||||
{
|
||||
Id = PersonnelListPermissionCode,
|
||||
Name = "لیست کل پرسنل",
|
||||
Code = PersonnelListPermissionCode,
|
||||
ParentId = PersonnelOperationsPermissionCode
|
||||
};
|
||||
#endregion
|
||||
|
||||
#region فیش حقوقی غیر رسمی,ParentId = CustomizeCheckoutOperationsPermissionCode
|
||||
|
||||
|
||||
public static SubAccountPermissionDto CustomizeCheckoutSetGroupAndSalaryPermission { get; } = new()
|
||||
public static SubAccountPermissionDto CustomizeCheckoutSetGroupAndSalaryPermission { get; } = new()
|
||||
{
|
||||
Id = CustomizeCheckoutSetGroupAndSalaryPermissionCode,
|
||||
Name = "تنظیم گروه بندی و حقوق پرسنل",
|
||||
@@ -708,6 +760,22 @@
|
||||
Code = CameraAccountSettingsPermissionCode,
|
||||
ParentId = RollCallOperationsPermissionCode
|
||||
};
|
||||
|
||||
public static SubAccountPermissionDto CameraAccountActivationBtn { get; } = new()
|
||||
{
|
||||
Id = CameraAccountActivationBtnPermissionCode,
|
||||
Name = "فعال/غیرفعال حساب کاربری دوربین",
|
||||
Code = CameraAccountActivationBtnPermissionCode,
|
||||
ParentId = CameraAccountSettingsPermissionCode
|
||||
};
|
||||
|
||||
public static SubAccountPermissionDto CameraAccountEdit { get; } = new()
|
||||
{
|
||||
Id = CameraAccountEditPermissionCode,
|
||||
Name = "ویراش حساب کاربری دوربین",
|
||||
Code = CameraAccountEditPermissionCode,
|
||||
ParentId = CameraAccountSettingsPermissionCode
|
||||
};
|
||||
#endregion
|
||||
|
||||
#region کارپوشه,ParentId = WorkFlowOperationsPermissionCode
|
||||
|
||||
@@ -19,6 +19,7 @@ using Microsoft.Extensions.Logging;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
|
||||
namespace _0_Framework.Application;
|
||||
@@ -32,6 +33,15 @@ public static class Tools
|
||||
public static string[] DayNames = { "شنبه", "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه" };
|
||||
public static string[] DayNamesG = { "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
|
||||
|
||||
|
||||
public static bool IsMobileValid(this string mobileNo)
|
||||
{
|
||||
if (mobileNo.Length < 11)
|
||||
return false;
|
||||
return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
|
||||
/// با کمک شروع بکار و ترک کار
|
||||
@@ -42,81 +52,81 @@ public static class Tools
|
||||
/// <param name="endDate"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <returns></returns>
|
||||
public static (int countWorkingDays,DateTime startWork,DateTime endWork,bool hasStartWorkInMonth,bool hasLeftWorkInMonth) GetEmployeeInsuranceWorkingDays(DateTime startWork,DateTime? leftWork,DateTime startDate,
|
||||
DateTime endDate,long employeeId)
|
||||
public static (int countWorkingDays, DateTime startWork, DateTime endWork, bool hasStartWorkInMonth, bool hasLeftWorkInMonth) GetEmployeeInsuranceWorkingDays(DateTime startWork, DateTime? leftWork, DateTime startDate,
|
||||
DateTime endDate, long employeeId)
|
||||
{
|
||||
DateTime start = startDate;
|
||||
DateTime start = startDate;
|
||||
DateTime end = endDate;
|
||||
bool startWorkInMonth = false;
|
||||
bool endWorkInMonth = false;
|
||||
|
||||
|
||||
//اگر شروع بکار پرسنل در ماه مشخص شده لیست بیمه بود
|
||||
if (startWork >= startDate)
|
||||
{
|
||||
start = startWork;
|
||||
startWorkInMonth = true;
|
||||
start = startWork;
|
||||
startWorkInMonth = true;
|
||||
}
|
||||
|
||||
if(leftWork == null)
|
||||
if (leftWork == null)
|
||||
leftWork = DateTime.MinValue;
|
||||
//اگر ترک کار پرسنل در ماه مشخص شده لیست بیمه بود
|
||||
if (leftWork != DateTime.MinValue && leftWork.Value < endDate)
|
||||
{
|
||||
end = leftWork.Value;
|
||||
end = leftWork.Value;
|
||||
endWorkInMonth = true;
|
||||
}
|
||||
|
||||
int countDays = (int)(end - start).TotalDays +1;
|
||||
int countDays = (int)(end - start).TotalDays + 1;
|
||||
|
||||
|
||||
//روزهای کارکرد پرسنل با آی دی های زیر دستی تعریف شد
|
||||
switch (employeeId)
|
||||
{
|
||||
|
||||
//case 3812://ثابت- کسری حاجی پور
|
||||
// countWorkingDays = 15;
|
||||
// break;
|
||||
case 40463://ثابت
|
||||
countDays = 10;
|
||||
break;
|
||||
case 40469://ثابت
|
||||
countDays = 7;
|
||||
break;
|
||||
//case 9950://ثابت
|
||||
// countDays = 15;
|
||||
//break;
|
||||
case 9640://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
case 40998://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
case 6219://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
//case 7897://ثابت
|
||||
// countWorkingDays = 15;
|
||||
//case 3812://ثابت- کسری حاجی پور
|
||||
// countWorkingDays = 15;
|
||||
// break;
|
||||
case 40463://ثابت
|
||||
countDays = 10;
|
||||
break;
|
||||
case 40469://ثابت
|
||||
countDays = 7;
|
||||
break;
|
||||
//case 9950://ثابت
|
||||
// countDays = 15;
|
||||
//break;
|
||||
case 9640://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
case 40998://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
case 6219://ثابت
|
||||
countDays = 15;
|
||||
break;
|
||||
//case 7897://ثابت
|
||||
// countWorkingDays = 15;
|
||||
}
|
||||
|
||||
|
||||
return (countDays,start,end,startWorkInMonth,endWorkInMonth);
|
||||
return (countDays, start, end, startWorkInMonth, endWorkInMonth);
|
||||
}
|
||||
/// <summary>
|
||||
/// محاسبه سن
|
||||
/// </summary>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <returns></returns>
|
||||
public static (int yearCount, int monthCount, int dayCount) GetAge(DateTime startDate, DateTime endDate)
|
||||
/// <summary>
|
||||
/// محاسبه سن
|
||||
/// </summary>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <returns></returns>
|
||||
public static (int yearCount, int monthCount, int dayCount) GetAge(DateTime startDate, DateTime endDate)
|
||||
{
|
||||
|
||||
|
||||
var startFa = startDate.ToFarsi();
|
||||
int startYear = Convert.ToInt32(startFa.Substring(0, 4));
|
||||
int startMonth = Convert.ToInt32(startFa.Substring(5, 2));
|
||||
int startDay = Convert.ToInt32(startFa.Substring(8, 2));
|
||||
var start = new PersianDateTime(startYear, startMonth, startDay);
|
||||
|
||||
|
||||
|
||||
var endFa = endDate.ToFarsi();
|
||||
int endYear = Convert.ToInt32(endFa.Substring(0, 4));
|
||||
int endMonth = Convert.ToInt32(endFa.Substring(5, 2));
|
||||
@@ -131,7 +141,7 @@ public static class Tools
|
||||
if (firstYearCounter > end)
|
||||
{
|
||||
start = start.AddYears(-1);
|
||||
|
||||
|
||||
var endMonthCounter = new PersianDateTime(end.Year, end.Month, start.Day);
|
||||
|
||||
for (var monthCounter = start; monthCounter <= end; monthCounter = monthCounter.AddMonths(1))
|
||||
@@ -183,7 +193,7 @@ public static class Tools
|
||||
if (yearCouner.Year == end.Year)
|
||||
{
|
||||
|
||||
var endMonthCounter = new PersianDateTime(end.Year, end.Month, (yearCouner.Day > end.Day ? end.Day : yearCouner.Day));
|
||||
var endMonthCounter = new PersianDateTime(end.Year, end.Month, (yearCouner.Day > end.Day ? end.Day : yearCouner.Day));
|
||||
|
||||
if (yearCouner.Day <= end.Day)
|
||||
{
|
||||
@@ -234,7 +244,7 @@ public static class Tools
|
||||
|
||||
Console.ResetColor();
|
||||
Console.WriteLine($"old: [{years} year] ، [{months} month] ، [{days} day]");
|
||||
return (years,months,days);
|
||||
return (years, months, days);
|
||||
}
|
||||
|
||||
public static string ToFarsi(this DateTime? date)
|
||||
@@ -387,9 +397,9 @@ public static class Tools
|
||||
|
||||
public static DateTime ToGeorgianDateTime(this string persianDate)
|
||||
{
|
||||
persianDate = persianDate.ToEnglishNumber();
|
||||
try
|
||||
{
|
||||
persianDate = persianDate.ToEnglishNumber();
|
||||
var year = Convert.ToInt32(persianDate.Substring(0, 4));
|
||||
var month = Convert.ToInt32(persianDate.Substring(5, 2));
|
||||
var day = Convert.ToInt32(persianDate.Substring(8, 2));
|
||||
@@ -448,25 +458,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)
|
||||
{
|
||||
@@ -588,90 +603,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;
|
||||
|
||||
}
|
||||
@@ -778,8 +793,8 @@ public static class Tools
|
||||
{
|
||||
case "0000000000":
|
||||
case "1111111111":
|
||||
case "22222222222":
|
||||
case "33333333333":
|
||||
case "2222222222":
|
||||
case "3333333333":
|
||||
case "4444444444":
|
||||
case "5555555555":
|
||||
case "6666666666":
|
||||
@@ -874,30 +889,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;
|
||||
@@ -1257,16 +1281,16 @@ public static class Tools
|
||||
var part5 = parts[5].Substring(0, 2);
|
||||
|
||||
|
||||
try
|
||||
try
|
||||
{
|
||||
PersianCalendar pc = new PersianCalendar();
|
||||
dateTime = pc.ToDateTime(int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]), int.Parse(parts[4]), int.Parse(part5), 0, 0, 0);
|
||||
|
||||
dateTime = pc.ToDateTime(int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]), int.Parse(parts[4]), int.Parse(part5), 0, 0, 0);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1374,18 +1398,46 @@ public static class Tools
|
||||
}
|
||||
public static DateTime FindFirstDayOfMonthGr(this DateTime date)
|
||||
{
|
||||
var pc = new PersianCalendar();
|
||||
return ($"{pc.GetYear(date)}/{pc.GetMonth(date):00}/01").ToGeorgianDateTime();
|
||||
var pc = new PersianCalendar();
|
||||
return ($"{pc.GetYear(date)}/{pc.GetMonth(date):00}/01").ToGeorgianDateTime();
|
||||
}
|
||||
#region Mahan
|
||||
/// <summary>
|
||||
/// این متد سعی میکند رشته را به تاریخ برگرداند و یک بول و دیت تایم برمیگرداند
|
||||
/// </summary>
|
||||
/// <param name="persianDate">تاریخ شمسی</param>
|
||||
/// <param name="georgianDateTime">تاریخ</param>
|
||||
/// <returns></returns>
|
||||
public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
|
||||
#region Mahan
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// این متد حروف عربی را به فارسی در میاورد. مثال: علي را به علی تبدیل میکند
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToPersian(this string text)
|
||||
{
|
||||
var res = "";
|
||||
foreach (var @char in text)
|
||||
{
|
||||
|
||||
if (@char == char.Parse("ي"))
|
||||
res += "ی";
|
||||
else if (@char == char.Parse("ك"))
|
||||
res += "ک";
|
||||
else
|
||||
res += @char;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// این متد سعی میکند رشته را به تاریخ برگرداند و یک بول و دیت تایم برمیگرداند
|
||||
/// </summary>
|
||||
/// <param name="persianDate">تاریخ شمسی</param>
|
||||
/// <param name="georgianDateTime">تاریخ</param>
|
||||
/// <returns></returns>
|
||||
public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(persianDate))
|
||||
{
|
||||
georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
|
||||
return false;
|
||||
}
|
||||
persianDate = persianDate.ToEnglishNumber();
|
||||
try
|
||||
{
|
||||
@@ -1552,19 +1604,19 @@ public static class Tools
|
||||
|
||||
public static TimeOnly CalculateOffset(ICollection<CustomizeSifts> shiftDetailsRegularShifts)
|
||||
{
|
||||
if (!shiftDetailsRegularShifts.Any())
|
||||
{
|
||||
return TimeOnly.MinValue;
|
||||
}
|
||||
var date = new DateOnly();
|
||||
var firstStartShift = new DateTime(date, shiftDetailsRegularShifts.MinBy(x => x.Placement).StartTime);
|
||||
var lastEndShift = new DateTime(date, shiftDetailsRegularShifts.MaxBy(x => x.Placement).EndTime);
|
||||
if (lastEndShift > firstStartShift)
|
||||
firstStartShift = firstStartShift.AddDays(1);
|
||||
var offSet = (firstStartShift - lastEndShift).Divide(2);
|
||||
return TimeOnly.FromDateTime(lastEndShift.Add(offSet));
|
||||
if (!shiftDetailsRegularShifts.Any())
|
||||
{
|
||||
return TimeOnly.MinValue;
|
||||
}
|
||||
var date = new DateOnly();
|
||||
var firstStartShift = new DateTime(date, shiftDetailsRegularShifts.MinBy(x => x.Placement).StartTime);
|
||||
var lastEndShift = new DateTime(date, shiftDetailsRegularShifts.MaxBy(x => x.Placement).EndTime);
|
||||
if (lastEndShift > firstStartShift)
|
||||
firstStartShift = firstStartShift.AddDays(1);
|
||||
var offSet = (firstStartShift - lastEndShift).Divide(2);
|
||||
return TimeOnly.FromDateTime(lastEndShift.Add(offSet));
|
||||
}
|
||||
public static DateTime GetNextDayOfWeek(this DateTime date, DayOfWeek dayOfWeek)
|
||||
public static DateTime GetNextDayOfWeek(this DateTime date, DayOfWeek dayOfWeek)
|
||||
{
|
||||
int numberOfNextDayOfWeek = ((int)dayOfWeek - (int)date.DayOfWeek + 7) % 7;
|
||||
return date.AddDays(numberOfNextDayOfWeek == 0 ? 7 : numberOfNextDayOfWeek);
|
||||
@@ -1644,6 +1696,10 @@ public static class Tools
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Pooya
|
||||
@@ -1736,75 +1792,75 @@ public static class Tools
|
||||
public static string ToFarsiHoursAndMinutes(int hours, int minutes, string emptyValue = "")
|
||||
{
|
||||
|
||||
string message = emptyValue;
|
||||
if (hours > 0 && minutes > 0)
|
||||
{
|
||||
string message = emptyValue;
|
||||
if (hours > 0 && minutes > 0)
|
||||
{
|
||||
|
||||
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
|
||||
}
|
||||
else if (hours > 0 && minutes == 0)
|
||||
{
|
||||
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
|
||||
}
|
||||
else if (hours > 0 && minutes == 0)
|
||||
{
|
||||
|
||||
message = hours + " " + "ساعت ";
|
||||
}
|
||||
else if (hours == 0 && minutes > 0)
|
||||
{
|
||||
message = hours + " " + "ساعت ";
|
||||
}
|
||||
else if (hours == 0 && minutes > 0)
|
||||
{
|
||||
|
||||
message = minutes + " " + "دقیقه";
|
||||
}
|
||||
message = minutes + " " + "دقیقه";
|
||||
}
|
||||
|
||||
return message;
|
||||
return message;
|
||||
}
|
||||
public static string ToFarsiHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
|
||||
public static string ToFarsiHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
|
||||
{
|
||||
var hours = (int)timeSpan.TotalHours;
|
||||
var minutes = timeSpan.Minutes;
|
||||
string message = emptyValue;
|
||||
if (hours > 0 && minutes > 0)
|
||||
{
|
||||
var hours = (int)timeSpan.TotalHours;
|
||||
var minutes = timeSpan.Minutes;
|
||||
string message = emptyValue;
|
||||
if (hours > 0 && minutes > 0)
|
||||
{
|
||||
|
||||
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
|
||||
}
|
||||
else if (hours > 0 && minutes == 0)
|
||||
{
|
||||
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
|
||||
}
|
||||
else if (hours > 0 && minutes == 0)
|
||||
{
|
||||
|
||||
message = hours + " " + "ساعت ";
|
||||
}
|
||||
else if (hours == 0 && minutes > 0)
|
||||
{
|
||||
message = hours + " " + "ساعت ";
|
||||
}
|
||||
else if (hours == 0 && minutes > 0)
|
||||
{
|
||||
|
||||
message = minutes + " " + "دقیقه";
|
||||
}
|
||||
message = minutes + " " + "دقیقه";
|
||||
}
|
||||
|
||||
return message;
|
||||
return message;
|
||||
}
|
||||
public static string ToFarsiDaysAndHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
|
||||
{
|
||||
var hours = (int)timeSpan.TotalHours;
|
||||
var minutes = timeSpan.Minutes;
|
||||
var days = hours / 24;
|
||||
hours = hours % 24;
|
||||
string message = "";
|
||||
public static string ToFarsiDaysAndHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
|
||||
{
|
||||
var hours = (int)timeSpan.TotalHours;
|
||||
var minutes = timeSpan.Minutes;
|
||||
var days = hours / 24;
|
||||
hours = hours % 24;
|
||||
string message = "";
|
||||
|
||||
if (days > 0)
|
||||
message += days + " " + "روز";
|
||||
if (hours > 0)
|
||||
if (message == "")
|
||||
message += hours + " " + "ساعت";
|
||||
else
|
||||
message += " و " + hours + " " + "ساعت";
|
||||
if (minutes > 0)
|
||||
if (message == "")
|
||||
message += minutes + " " + "دقیقه";
|
||||
else
|
||||
message += " و " + minutes + " " + "دقیقه";
|
||||
if (days > 0)
|
||||
message += days + " " + "روز";
|
||||
if (hours > 0)
|
||||
if (message == "")
|
||||
message += hours + " " + "ساعت";
|
||||
else
|
||||
message += " و " + hours + " " + "ساعت";
|
||||
if (minutes > 0)
|
||||
if (message == "")
|
||||
message += minutes + " " + "دقیقه";
|
||||
else
|
||||
message += " و " + minutes + " " + "دقیقه";
|
||||
|
||||
if (message == "")
|
||||
message = emptyValue;
|
||||
return message;
|
||||
}
|
||||
if (message == "")
|
||||
message = emptyValue;
|
||||
return message;
|
||||
}
|
||||
|
||||
public static bool ArePropertiesEqual<T>(this T obj1, T obj2)
|
||||
public static bool ArePropertiesEqual<T>(this T obj1, T obj2)
|
||||
{
|
||||
// If either object is null, they can't be equal
|
||||
if (obj1 == null || obj2 == null)
|
||||
@@ -1837,5 +1893,44 @@ public static class Tools
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Davoodi
|
||||
|
||||
public static List<string> GetDaysBetweenDateGeorgian(DateTime startDate, DateTime? endDate)
|
||||
{
|
||||
var days = new List<string>();
|
||||
|
||||
if (endDate == null)
|
||||
endDate = DateTime.Now;
|
||||
|
||||
var persianStartDate = new MD.PersianDateTime.Standard.PersianDateTime(startDate);
|
||||
var persianEndDate = new MD.PersianDateTime.Standard.PersianDateTime(endDate);
|
||||
|
||||
|
||||
while (persianEndDate - persianStartDate >= TimeSpan.FromDays(0))
|
||||
{
|
||||
days.Add(persianStartDate.ToShortDateString());
|
||||
persianStartDate = persianStartDate.AddDays(1);
|
||||
}
|
||||
|
||||
return days;
|
||||
}
|
||||
|
||||
public static int GetWorkingDaysDifference(DateTime? fromDate, DateTime? toDate)
|
||||
{
|
||||
//var workingDays = PersianDateExtensions.GetWorkingDays(new PersianDateTime(fromDate.ToFarsi()), new PersianDateTime(toDate.ToFarsi()), true);
|
||||
var workingDays = PersianDateExtensions.GetWorkingDays((DateTime)fromDate, (DateTime)toDate, true);
|
||||
|
||||
|
||||
if (fromDate > toDate)
|
||||
workingDays *= -1;
|
||||
|
||||
|
||||
return workingDays;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -33,10 +33,25 @@ public class UidService : IUidService
|
||||
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
|
||||
if(!requestResult.IsSuccessStatusCode)
|
||||
return null;
|
||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
|
||||
return responseResult;
|
||||
try
|
||||
{
|
||||
if (!requestResult.IsSuccessStatusCode)
|
||||
return null;
|
||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
|
||||
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
|
||||
{
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ namespace _0_Framework.Application
|
||||
Client,
|
||||
SubAccount,
|
||||
Camera,
|
||||
Admin
|
||||
Admin,
|
||||
System
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,231 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using OfficeOpenXml;
|
||||
|
||||
namespace _0_Framework.Excel.Checkout;
|
||||
|
||||
using OfficeOpenXml;
|
||||
using OfficeOpenXml.Style;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
public class CustomizeCheckoutExcelGenerator
|
||||
{
|
||||
public static byte[] GenerateCheckoutTempExcelInfo(List<CustomizeCheckoutTempExcelViewModel> data, List<string> selectedParameters)
|
||||
{
|
||||
OfficeOpenXml.ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
|
||||
using var package = new ExcelPackage();
|
||||
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
|
||||
|
||||
|
||||
// Define headers
|
||||
Dictionary<string, string> headers = new Dictionary<string, string>
|
||||
{
|
||||
{ "Month", "ماه" },
|
||||
{ "Year", "سال" },
|
||||
{ "EmployeeFullName", "نام و نام خانوادگی" },
|
||||
{ "PersonnelCodeString", "شماره پرسنلی" },
|
||||
{ "NationalCode", "کدملی" },
|
||||
{ "SumOfWorkingDays", "روز کارکرد" },
|
||||
{ "MonthlySalary", "حقوق ماهانه" },
|
||||
{ "BaseYearsPay", "سنوات" },
|
||||
{ "MarriedAllowance", "حق تاهل" },
|
||||
{ "OvertimePay", "اضافه کاری" },
|
||||
{ "NightworkPay", "شب کاری" },
|
||||
{ "FridayPay", "جمعه کاری" },
|
||||
{ "MissionPay", "مأموریت" },
|
||||
{ "ShiftPay", "نوبت کاری" },
|
||||
{ "FamilyAllowance", "حق فرزند" },
|
||||
{ "BonusesPay", "پاداش" },
|
||||
{ "LeavePay", "مزد مرخصی" },
|
||||
{ "RewardPay", "پاداش" },
|
||||
{ "FineDeduction", "جریمه" },
|
||||
{ "InsuranceDeduction", "حق بیمه" },
|
||||
{ "TaxDeducation", "مالیات" },
|
||||
{ "InstallmentDeduction", "قسط وام" },
|
||||
{ "SalaryAidDeduction", "مساعده" },
|
||||
{ "AbsenceDeduction", "غیبت" },
|
||||
{ "EarlyExitDeduction", "تعجیل در خروج" },
|
||||
{ "LateToWorkDeduction", "تاخیر در ورود" },
|
||||
{ "TotalClaims", "جمع مطالبات" },
|
||||
{ "TotalDeductions", "جمع کسورات" },
|
||||
{ "TotalPayment", "مبلغ قابل پرداخت" },
|
||||
{ "CardNumber", "شماره کارت" },
|
||||
{ "ShebaNumber", "شماره شبا" },
|
||||
{ "BankAccountNumber", "شماره حساب" },
|
||||
|
||||
};
|
||||
Dictionary<string, string> filteredHeaders;
|
||||
if (!selectedParameters.Any())
|
||||
{
|
||||
filteredHeaders = headers;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Filter headers based on selected parameters
|
||||
filteredHeaders = headers.Where(h => selectedParameters.Contains(h.Key)).ToDictionary();
|
||||
}
|
||||
var indexCell = worksheet.Cells[1, 1];
|
||||
indexCell.Value = "ردیف";
|
||||
ApplyHeaderStyle(indexCell);
|
||||
// Add headers to worksheet
|
||||
for (int i = 0; i < filteredHeaders.Count; i++)
|
||||
{
|
||||
worksheet.Cells[1, i + 2].Value = filteredHeaders.ElementAt(i).Value;
|
||||
ApplyHeaderStyle(worksheet.Cells[1, i + 2]);
|
||||
}
|
||||
|
||||
var dataRow = 2;
|
||||
int totalPaymentColumnIndex = -1;
|
||||
foreach (var item in data)
|
||||
{
|
||||
var column = 2;
|
||||
foreach (var header in filteredHeaders)
|
||||
{
|
||||
var property = item.GetType().GetProperty(header.Key);
|
||||
var value = property.GetValue(item, null)?.ToString();
|
||||
|
||||
// Check if the property requires MoneyToDouble()
|
||||
if (RequiresMoneyToDouble(property.Name))
|
||||
{
|
||||
worksheet.Cells[dataRow, column].Value = MoneyToDouble(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
worksheet.Cells[dataRow, column].Value = value;
|
||||
}
|
||||
|
||||
ApplyGeneralDataStyle(worksheet.Cells[dataRow, column]);
|
||||
ApplySpecificStyle(worksheet.Cells[dataRow, column], column); // Apply specific styles
|
||||
if (header.Key == "TotalPayment")
|
||||
{
|
||||
totalPaymentColumnIndex = column;
|
||||
}
|
||||
column++;
|
||||
}
|
||||
var rowCounter = worksheet.Cells[dataRow, 1];
|
||||
rowCounter.Value = dataRow - 1;
|
||||
ApplyGeneralDataStyle(rowCounter);
|
||||
ApplySpecificStyle(rowCounter, 1);
|
||||
|
||||
dataRow++;
|
||||
}
|
||||
|
||||
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
|
||||
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
|
||||
worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
|
||||
worksheet.PrinterSettings.FitToPage = true;
|
||||
worksheet.PrinterSettings.FitToWidth = 1;
|
||||
worksheet.PrinterSettings.FitToHeight = 0;
|
||||
worksheet.PrinterSettings.Scale = 85;
|
||||
worksheet.View.RightToLeft = true;
|
||||
|
||||
if (totalPaymentColumnIndex != -1)
|
||||
{
|
||||
ApplyConditionalFormatting(worksheet, dataRow, totalPaymentColumnIndex);
|
||||
}
|
||||
|
||||
return package.GetAsByteArray();
|
||||
}
|
||||
|
||||
// Method to check if a property requires MoneyToDouble()
|
||||
private static bool RequiresMoneyToDouble(string propertyName)
|
||||
{
|
||||
var propertiesRequiringConversion = new HashSet<string>
|
||||
{
|
||||
"MonthlySalary", "RewardPay", "FridayPay", "OvertimePay", "ShiftPay", "NightWorkPay",
|
||||
"MarriedAllowance", "FamilyAllowance", "BonusesPay", "BaseYearsPay", "LeavePay",
|
||||
"AbsenceDeduction", "LateToWorkDeduction", "EarlyExitDeduction", "SalaryAidDeduction",
|
||||
"InstallmentDeduction", "FineDeduction", "InsuranceDeduction", "TaxDeduction",
|
||||
"TotalClaims", "TotalDeductions", "TotalPayment"
|
||||
};
|
||||
return propertiesRequiringConversion.Contains(propertyName);
|
||||
}
|
||||
|
||||
// Placeholder for the MoneyToDouble() method
|
||||
private static double MoneyToDouble(string value)
|
||||
{
|
||||
Console.WriteLine(value);
|
||||
var min = value.Length>1? value.Substring(0, 2): "";
|
||||
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
|
||||
|
||||
Console.WriteLine(test);
|
||||
return test;
|
||||
}
|
||||
|
||||
private static void ApplyHeaderStyle(ExcelRange cell)
|
||||
{
|
||||
cell.Style.Font.Bold = true;
|
||||
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
||||
cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
|
||||
cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||
cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
||||
}
|
||||
|
||||
private static void ApplyGeneralDataStyle(ExcelRange cell)
|
||||
{
|
||||
cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
||||
cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||
cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
||||
}
|
||||
|
||||
private static void ApplySpecificStyle(ExcelRange cell, int columnIndex)
|
||||
{
|
||||
switch (columnIndex)
|
||||
{
|
||||
case int n when (n >= 1 && n <= 8):
|
||||
cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
|
||||
break;
|
||||
case int n when (n >= 9 && n <= 19):
|
||||
cell.Style.Fill.BackgroundColor.SetColor(1, 208, 248, 208);
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case int n when (n >= 20 && n <= 27):
|
||||
cell.Style.Fill.BackgroundColor.SetColor(1, 246, 176, 176);
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case 28:
|
||||
cell.Style.Fill.BackgroundColor.SetColor(1, 169, 208, 142);
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case 29:
|
||||
cell.Style.Fill.BackgroundColor.SetColor(1, 241, 143, 143);
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case 30:
|
||||
cell.Style.Fill.BackgroundColor.SetColor(1, 168, 186, 254);
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case >= 31 and <= 33:
|
||||
cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ApplyConditionalFormatting(ExcelWorksheet worksheet, int dataRow, int totalPaymentColumnIndex)
|
||||
{
|
||||
for (int rowIndex = 2; rowIndex < dataRow; rowIndex++)
|
||||
{
|
||||
var totalPaymentValue = worksheet.Cells[rowIndex, totalPaymentColumnIndex].Value;
|
||||
if (totalPaymentValue != null && double.TryParse(totalPaymentValue.ToString(), out double payment))
|
||||
{
|
||||
if (payment < 0)
|
||||
{
|
||||
var rowRange = worksheet.Cells[rowIndex, 1, rowIndex, worksheet.Dimension.End.Column];
|
||||
rowRange.Style.Fill.PatternType = ExcelFillStyle.Solid; rowRange.Style.Fill.BackgroundColor.SetColor(Color.Red);
|
||||
foreach (var cell in rowRange)
|
||||
{
|
||||
cell.Style.Font.Color.SetColor(Color.White);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace AccountManagement.Application.Contracts.Account;
|
||||
|
||||
public class AccountSelectListViewModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
|
||||
public long RoleId { get; set; }
|
||||
}
|
||||
@@ -41,6 +41,8 @@ public interface IAccountApplication
|
||||
List<AccountViewModel> GetAccountsByPositionId(long positionId);
|
||||
|
||||
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
||||
Task<List<AccountSelectListViewModel>> GetAdminSelectList();
|
||||
|
||||
OperationResult ReLogin();
|
||||
|
||||
#endregion
|
||||
@@ -55,4 +57,11 @@ public interface IAccountApplication
|
||||
#endregion
|
||||
|
||||
OperationResult DirectCameraLogin(long cameraAccountId);
|
||||
|
||||
/// <summary>
|
||||
/// چک میکند که آیا اکانتی با این نام کاربری وجود دارد یا نه
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <returns></returns>
|
||||
public bool CheckExistClientAccount(string userName);
|
||||
}
|
||||
@@ -4,12 +4,13 @@ using System.Collections.Generic;
|
||||
|
||||
namespace AccountManagement.Application.Contracts.Media
|
||||
{
|
||||
public interface IMediaApplication
|
||||
{
|
||||
MediaViewModel Get(long id);
|
||||
OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength, List<string> allowedExtensions);
|
||||
OperationResult MoveFile(long mediaId, string newRelativePath);
|
||||
OperationResult DeleteFile(long mediaId);
|
||||
List<MediaViewModel> GetRange(IEnumerable<long> select);
|
||||
}
|
||||
}
|
||||
public interface IMediaApplication
|
||||
{
|
||||
MediaViewModel Get(long id);
|
||||
OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||
List<string> allowedExtensions, string category);
|
||||
OperationResult MoveFile(long mediaId, string newRelativePath);
|
||||
OperationResult DeleteFile(long mediaId);
|
||||
List<MediaViewModel> GetRange(IEnumerable<long> select);
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,6 @@ namespace AccountManagement.Application.Contracts.SubAccount
|
||||
public string PhoneNumber { get; set; }
|
||||
public string Username { get; set; }
|
||||
public string ProfilePhoto { get; set; }
|
||||
public List<long> WorkshopIds { get; set; }
|
||||
//public List<long> WorkshopIds { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,5 +8,6 @@ namespace AccountManagement.Application.Contracts.SubAccount
|
||||
public string Title { get; set; }
|
||||
public long AccountId { get; set; }
|
||||
public List<int> Permissions { get; set; }
|
||||
public List<long> WorkshopIds { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace AccountManagement.Application.Contracts.SubAccount
|
||||
public string PhoneNumber { get; set; }
|
||||
public string RePassword { get; set; }
|
||||
public long SubAccountRoleId { get; set; }
|
||||
public List<long> WorkshopIds { get; set; }
|
||||
//public List<long> WorkshopIds { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,5 +7,6 @@ namespace AccountManagement.Application.Contracts.SubAccount
|
||||
public long Id { get; set; }
|
||||
public string Title { get; set; }
|
||||
public List<int> Permissions { get; set; }
|
||||
public List<long> WorkshopIds { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using IPE.SmsIrClient.Models.Results;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace AccountManagement.Application.Contracts.Task;
|
||||
@@ -19,9 +20,9 @@ public class CreateTask
|
||||
#region Task Schedule
|
||||
|
||||
public string ScheduleCount { get; set; }
|
||||
public string ScheduleType{ get; set; }
|
||||
public TaskScheduleType ScheduleType { get; set; }
|
||||
public bool HasSchedule { get; set; }
|
||||
public string ScheduleUnitType { get; set; }
|
||||
public TaskScheduleUnitType ScheduleUnitType { get; set; }
|
||||
public string ScheduleUnitNumber { get; set; }
|
||||
public long TaskScheduleId { get; set; }
|
||||
|
||||
@@ -30,4 +31,18 @@ public class CreateTask
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public enum TaskScheduleType
|
||||
{
|
||||
Limited,
|
||||
Unlimited
|
||||
}
|
||||
|
||||
public enum TaskScheduleUnitType
|
||||
{
|
||||
Day,
|
||||
Week,
|
||||
Month,
|
||||
Year
|
||||
}
|
||||
@@ -20,4 +20,6 @@ public class EditTask:CreateTask
|
||||
public long? TicketId { get; set; }
|
||||
public List<AccountViewModel> AssignsLists { get; set; }
|
||||
public bool HasTicket { get; set; }
|
||||
public long TaskScheduleId { get; set; }
|
||||
public bool HasRequest { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Assign;
|
||||
using AccountManagement.Application.Contracts.TaskMessage;
|
||||
@@ -24,6 +25,13 @@ public interface ITaskApplication
|
||||
List<TaskViewModel> GetSentTasks(TaskSearchModel searchModel);
|
||||
List<TaskViewModel> GetTasksHaveTicket(TaskSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// لیست تسک های دوره ای ایجاد شده توسط کاربر
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
List<TaskViewModel> GetTaskScheduleList(TaskSearchModel searchModel);
|
||||
|
||||
// گرفتن مهلت برای یک وظیفه
|
||||
OperationResult CreateRequestTime(CreateTaskTimeRequest command);
|
||||
List<TaskViewModel> GetRequestTaskHasTicket(TaskSearchModel searchModel);
|
||||
@@ -46,10 +54,10 @@ public interface ITaskApplication
|
||||
OperationResult CreateTaskByPosition(CreateTask command, List<long> positionIds);
|
||||
List<TaskViewModel> GetRequestedTasks(TaskSearchModel searchModel);
|
||||
List<TaskViewModel> AllRequestedTasks(TaskSearchModel searchModel);
|
||||
int GetRequestedTasksCount();
|
||||
Task<int> GetRequestedTasksCount();
|
||||
|
||||
int TasksHaveTicketCounts(long userId);
|
||||
int TasksHaveTicketRequestsCount(long userId);
|
||||
Task<int> TasksHaveTicketCounts(long userId);
|
||||
Task<int> TasksHaveTicketRequestsCount(long userId);
|
||||
|
||||
List<TaskMessageViewModel> GetTaskMessages(long assignId);
|
||||
|
||||
@@ -63,16 +71,14 @@ public interface ITaskApplication
|
||||
|
||||
List<AssignViewModel> GetAssignsByTaskId(long taskId);
|
||||
|
||||
int RequestedAndOverdueTasksCount(long userId);
|
||||
Task<int> RequestedAndOverdueTasksCount(long userId);
|
||||
|
||||
/// <summary>
|
||||
///تعداد تسک های شخصی و دریافتی برای امروز و یا عقب افتاده
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
int OverdueTasksCount(long userId);
|
||||
/// <summary>
|
||||
/// تعداد تسک های شخصی و دریافتی برای امروز و یا عقب افتاده
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> OverdueTasksCount(long userId);
|
||||
|
||||
|
||||
//متد انتقال داده از تسک به ارجاعی ها
|
||||
//OperationResult MoveDataFRomTaskToAssign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,10 @@ public class TaskViewModel
|
||||
public bool CanDelete { get; set; }
|
||||
public bool CanAssign { get; set; }
|
||||
public bool CanCheckRequests { get; set; }
|
||||
public bool HasRequest { get; set; }
|
||||
public AssignViewModel AssignedReceiverViewModel { get; set; }
|
||||
|
||||
|
||||
public TaskScheduleType ScheduleType { get; set; }
|
||||
public TaskScheduleUnitType ScheduleUnitType { get; set; }
|
||||
public long TaskScheduleId { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using _0_Framework.Application;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
|
||||
namespace AccountManagement.Application.Contracts.TaskSchedule;
|
||||
@@ -6,7 +8,8 @@ namespace AccountManagement.Application.Contracts.TaskSchedule;
|
||||
public interface ITaskScheduleApplication
|
||||
{
|
||||
OperationResult Create(CreateTask command);
|
||||
OperationResult CreateLimitedTasks(CreateTask command);
|
||||
OperationResult CreateUnlimitedTasks(CreateTask command);
|
||||
|
||||
Task<TaskScheduleDetailsViewModel> GetDetails(long id);
|
||||
|
||||
OperationResult Remove(long taskScheduleId);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System.Collections.Generic;
|
||||
using AccountManagement.Application.Contracts.Media;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
|
||||
namespace AccountManagement.Application.Contracts.TaskSchedule;
|
||||
|
||||
public class TaskScheduleDetailsViewModel
|
||||
{
|
||||
public string SenderName { get; set; }
|
||||
public List<string> AssignedName { get; set; }
|
||||
public TaskScheduleType TaskScheduleType { get; set; }
|
||||
public TaskScheduleUnitType TaskScheduleUnitType { get; set; }
|
||||
public string UnitNumber { get; set; }
|
||||
public string CreationDateFa { get; set; }
|
||||
public string ContractingPartyName { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Count { get; set; }
|
||||
public string FirstEndTaskDate { get; set; }
|
||||
public List<MediaViewModel> Medias { get; set; }
|
||||
|
||||
}
|
||||
@@ -308,7 +308,7 @@ public class AccountApplication : IAccountApplication
|
||||
{
|
||||
Slug = _passwordHasher.SlugHasher(x.WorkshopId),
|
||||
Name = x.WorkshopName,
|
||||
PersonnelCount = 0,
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Id = x.WorkshopId
|
||||
}).ToList();
|
||||
|
||||
@@ -549,7 +549,8 @@ public class AccountApplication : IAccountApplication
|
||||
return operation.Succcedded(2);
|
||||
}
|
||||
|
||||
public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
|
||||
public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
{
|
||||
string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||
List<WorkshopAccountlistViewModel> source =_accountLeftworkRepository.WorkshopList(accountId);
|
||||
@@ -626,7 +627,10 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
||||
{
|
||||
return await _accountRepository.GetAdminSelectList();
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region Pooya
|
||||
@@ -785,4 +789,10 @@ public class AccountApplication : IAccountApplication
|
||||
//}
|
||||
#endregion
|
||||
|
||||
|
||||
public bool CheckExistClientAccount(string userName)
|
||||
{
|
||||
return _accountRepository.CheckExistClientAccount(userName);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,147 +9,113 @@ using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace AccountManagement.Application
|
||||
{
|
||||
public class MediaApplication:IMediaApplication
|
||||
{
|
||||
public class MediaApplication : IMediaApplication
|
||||
{
|
||||
|
||||
|
||||
private const string _basePath = "Medias";
|
||||
private readonly IMediaRepository _mediaRepository;
|
||||
private const string _basePath = "Medias";
|
||||
private readonly IMediaRepository _mediaRepository;
|
||||
|
||||
public MediaApplication(IMediaRepository mediaRepository)
|
||||
{
|
||||
_mediaRepository = mediaRepository;
|
||||
}
|
||||
public MediaApplication(IMediaRepository mediaRepository)
|
||||
{
|
||||
_mediaRepository = mediaRepository;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
|
||||
/// </summary>
|
||||
/// <param name="file">فایل</param>
|
||||
/// <param name="fileLabel">برچسب فایل که در نام فایل ظاهر می شود</param>
|
||||
/// <param name="relativePath">مسیر فایل</param>
|
||||
/// <param name="allowedExtensions">[.png,.jpg,.jpeg] پسوند های مجاز مثلا </param>
|
||||
/// <param name="maximumFileLength">حداکثر حجم فایل به مگابایت</param>
|
||||
/// <returns></returns>
|
||||
public OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath,int maximumFileLength,List<string> allowedExtensions)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var path = Path.Combine(_basePath, relativePath);
|
||||
var fileExtension = Path.GetExtension(file.FileName);
|
||||
|
||||
if (file == null || file.Length == 0)
|
||||
return op.Failed("خطای سیستمی");
|
||||
|
||||
if (file.Length > (maximumFileLength * 1024 * 1024))
|
||||
return op.Failed($"حجم فایل نمی تواند بیشتر از " +
|
||||
$"{maximumFileLength}" +
|
||||
$"مگابایت باشد");
|
||||
|
||||
if (!allowedExtensions.Contains(fileExtension.ToLower()))
|
||||
{
|
||||
var operationMessage = ":فرمت فایل باید یکی از موارد زیر باشد";
|
||||
operationMessage += "\n";
|
||||
operationMessage += string.Join(" ", allowedExtensions);
|
||||
return op.Failed(operationMessage);
|
||||
}
|
||||
/// <summary>
|
||||
/// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
|
||||
/// </summary>
|
||||
/// <param name="file">فایل</param>
|
||||
/// <param name="fileLabel">برچسب فایل که در نام فایل ظاهر می شود</param>
|
||||
/// <param name="relativePath">مسیر فایل</param>
|
||||
/// <param name="maximumFileLength">حداکثر حجم فایل به مگابایت</param>
|
||||
/// <param name="allowedExtensions">[.png,.jpg,.jpeg] پسوند های مجاز مثلا </param>
|
||||
/// <param name="category"></param>
|
||||
/// <returns></returns>
|
||||
public OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||
List<string> allowedExtensions, string category)
|
||||
{
|
||||
return _mediaRepository.UploadFile(file, fileLabel, relativePath, maximumFileLength, allowedExtensions, category);
|
||||
}
|
||||
|
||||
|
||||
Directory.CreateDirectory(path);
|
||||
/// <summary>
|
||||
/// حذف فایل
|
||||
/// </summary>
|
||||
public OperationResult DeleteFile(long mediaId)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var media = _mediaRepository.Get(mediaId);
|
||||
if (media == null)
|
||||
return op.Failed("رکورد مورد نظر یافت نشد");
|
||||
try
|
||||
{
|
||||
if (File.Exists(media.Path))
|
||||
File.Delete(media.Path);
|
||||
else
|
||||
return op.Failed("فایل یافت نشد");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return op.Failed("خطایی در حذف فایل رخ داده است");
|
||||
}
|
||||
|
||||
var extension = Path.GetExtension(file.FileName);
|
||||
_mediaRepository.Remove(media.id);
|
||||
_mediaRepository.SaveChanges();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
var uniqueFileName = $"{fileLabel}-{DateTime.Now.Ticks}{extension}";
|
||||
var filePath = Path.Combine(path, uniqueFileName);
|
||||
using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
|
||||
{
|
||||
file.CopyTo(fileStream);
|
||||
}
|
||||
var mediaEntity = new Media(filePath, extension, "فایل", "EmployeeDocuments");
|
||||
_mediaRepository.Create(mediaEntity);
|
||||
_mediaRepository.SaveChanges();
|
||||
/// <summary>
|
||||
/// جابجا کردن فایل
|
||||
/// </summary>
|
||||
public OperationResult MoveFile(long mediaId, string newRelativePath)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var media = _mediaRepository.Get(mediaId);
|
||||
var oldPath = media.Path;
|
||||
var path = Path.Combine(_basePath, newRelativePath);
|
||||
Directory.CreateDirectory(path);
|
||||
|
||||
return op.Succcedded(mediaEntity.id);
|
||||
string filepath = Path.Combine(path, Path.GetFileName(oldPath));
|
||||
try
|
||||
{
|
||||
File.Move(oldPath, filepath);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return op.Failed("در جابجایی فایل خطایی رخ داده است");
|
||||
}
|
||||
|
||||
}
|
||||
media.Edit(filepath, media.Type, media.Category);
|
||||
_mediaRepository.SaveChanges();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public MediaViewModel Get(long id)
|
||||
{
|
||||
var media = _mediaRepository.Get(id);
|
||||
if (media == null)
|
||||
return new();
|
||||
return new MediaViewModel()
|
||||
{
|
||||
Category = media.Category,
|
||||
Path = media.Path,
|
||||
Id = media.id,
|
||||
Type = media.Type
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// حذف فایل
|
||||
/// </summary>
|
||||
public OperationResult DeleteFile(long mediaId)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var media = _mediaRepository.Get(mediaId);
|
||||
if (media == null)
|
||||
return op.Failed("رکورد مورد نظر یافت نشد");
|
||||
try
|
||||
{
|
||||
if (File.Exists(media.Path))
|
||||
File.Delete(media.Path);
|
||||
else
|
||||
return op.Failed("فایل یافت نشد");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return op.Failed("خطایی در حذف فایل رخ داده است");
|
||||
}
|
||||
public List<MediaViewModel> GetRange(IEnumerable<long> ids)
|
||||
{
|
||||
var medias = _mediaRepository.GetRange(ids);
|
||||
return medias.Select(x => new MediaViewModel()
|
||||
{
|
||||
Category = x.Category,
|
||||
Path = x.Path,
|
||||
Id = x.id,
|
||||
Type = x.Type,
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
_mediaRepository.Remove(media.id);
|
||||
_mediaRepository.SaveChanges();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// جابجا کردن فایل
|
||||
/// </summary>
|
||||
public OperationResult MoveFile(long mediaId, string newRelativePath)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var media = _mediaRepository.Get(mediaId);
|
||||
var oldPath = media.Path;
|
||||
var path = Path.Combine(_basePath, newRelativePath);
|
||||
Directory.CreateDirectory(path);
|
||||
|
||||
string filepath = Path.Combine(path, Path.GetFileName(oldPath));
|
||||
try
|
||||
{
|
||||
File.Move(oldPath, filepath);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return op.Failed("در جابجایی فایل خطایی رخ داده است");
|
||||
}
|
||||
|
||||
media.Edit(filepath, media.Type, media.Category);
|
||||
_mediaRepository.SaveChanges();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public MediaViewModel Get(long id)
|
||||
{
|
||||
var media = _mediaRepository.Get(id);
|
||||
if (media == null)
|
||||
return new();
|
||||
return new MediaViewModel()
|
||||
{
|
||||
Category = media.Category,
|
||||
Path = media.Path,
|
||||
Id = media.id,
|
||||
Type = media.Type
|
||||
};
|
||||
}
|
||||
|
||||
public List<MediaViewModel> GetRange(IEnumerable<long> ids)
|
||||
{
|
||||
var medias = _mediaRepository.GetRange(ids);
|
||||
return medias.Select(x=>new MediaViewModel()
|
||||
{
|
||||
Category = x.Category,
|
||||
Path = x.Path,
|
||||
Id = x.id,
|
||||
Type = x.Type,
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,12 +113,12 @@ namespace AccountManagement.Application
|
||||
if (cmd.PhoneNumber.Length != 11)
|
||||
return op.Failed("شماره تلفن همراه نامعتبر است");
|
||||
|
||||
if (!cmd.WorkshopIds.Any())
|
||||
return op.Failed("حداقل یک کارگاه را انتخاب کنید");
|
||||
//if (!cmd.WorkshopIds.Any())
|
||||
// return op.Failed("حداقل یک کارگاه را انتخاب کنید");
|
||||
|
||||
|
||||
if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||
return op.Failed("خطای سیستمی");
|
||||
//if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||
// return op.Failed("خطای سیستمی");
|
||||
|
||||
|
||||
if (cmd.SubAccountRoleId == 0 || !_subAccountRoleRepository.Exists(x => cmd.SubAccountRoleId == x.id))
|
||||
@@ -131,6 +131,10 @@ namespace AccountManagement.Application
|
||||
_cameraAccountRepository.Exists(x => x.Username == cmd.Username))
|
||||
return op.Failed("نام کاربری نمی تواند تکراری باشد");
|
||||
|
||||
var role = _subAccountRoleRepository.Get(cmd.SubAccountRoleId);
|
||||
var workshopId = role.RoleWorkshops.Select(x => x.WorkshopId).ToList();
|
||||
|
||||
|
||||
var entity = new SubAccount(cmd.AccountId, cmd.SubAccountRoleId, cmd.NationalCode, cmd.FName, cmd.LName, cmd.PhoneNumber, cmd.Username, _passwordHasher.Hash(cmd.Password),
|
||||
cmd.ProfilePhoto);
|
||||
|
||||
@@ -142,7 +146,7 @@ namespace AccountManagement.Application
|
||||
_subAccountRepository.SaveChanges();
|
||||
|
||||
|
||||
var workshops = cmd.WorkshopIds.Select(x => new WorkshopSubAccount(x, entity.id));
|
||||
var workshops = workshopId.Select(x => new WorkshopSubAccount(x, entity.id));
|
||||
|
||||
foreach (var w in workshops)
|
||||
_workshopSubAccountRepository.Create(w);
|
||||
@@ -175,22 +179,22 @@ namespace AccountManagement.Application
|
||||
|
||||
|
||||
|
||||
if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||
return op.Failed("خطای سیستمی");
|
||||
//if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||
// return op.Failed("خطای سیستمی");
|
||||
|
||||
|
||||
if (cmd.SubAccountRoleId == 0 || !_subAccountRoleRepository.Exists(x => cmd.SubAccountRoleId == x.id))
|
||||
return op.Failed("نقش مورد نظر وجود ندارد");
|
||||
|
||||
var workshopSubAccounts = _workshopSubAccountRepository.GetWorkshopsSubAccountEntityBySubAccountId(entity.id);
|
||||
foreach (var workshopSubAccount in workshopSubAccounts)
|
||||
_workshopSubAccountRepository.Remove(workshopSubAccount);
|
||||
//var workshopSubAccounts = _workshopSubAccountRepository.GetWorkshopsSubAccountEntityBySubAccountId(entity.id);
|
||||
//foreach (var workshopSubAccount in workshopSubAccounts)
|
||||
// _workshopSubAccountRepository.Remove(workshopSubAccount);
|
||||
|
||||
|
||||
var workshops = cmd.WorkshopIds.Select(x => new WorkshopSubAccount(x, entity.id));
|
||||
//var workshops = cmd.WorkshopIds.Select(x => new WorkshopSubAccount(x, entity.id));
|
||||
|
||||
foreach (var w in workshops)
|
||||
_workshopSubAccountRepository.Create(w);
|
||||
//foreach (var w in workshops)
|
||||
// _workshopSubAccountRepository.Create(w);
|
||||
|
||||
entity.Edit(cmd.SubAccountRoleId, cmd.NationalCode, cmd.FName, cmd.LName, cmd.ProfilePhoto);
|
||||
_workshopSubAccountRepository.SaveChanges();
|
||||
@@ -227,7 +231,8 @@ namespace AccountManagement.Application
|
||||
{
|
||||
Id = entity.id,
|
||||
Title = entity.Title,
|
||||
Permissions = entity.RolePermissions.Select(x => x.PermissionCode).ToList()
|
||||
Permissions = entity.RolePermissions.Select(x => x.PermissionCode).ToList(),
|
||||
WorkshopIds = entity.RoleWorkshops.Select(x=>x.WorkshopId).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
@@ -241,7 +246,7 @@ namespace AccountManagement.Application
|
||||
OperationResult op = new();
|
||||
if (_subAccountRoleRepository.Exists(x => x.AccountId == command.AccountId && x.Title.Trim() == command.Title.Trim()))
|
||||
return op.Failed("یک نقش با این عنوان وجود دارد");
|
||||
var role = new SubAccountRole(command.Title, command.Permissions, command.AccountId);
|
||||
var role = new SubAccountRole(command.Title, command.Permissions, command.AccountId,command.WorkshopIds);
|
||||
_subAccountRoleRepository.Create(role);
|
||||
_subAccountRoleRepository.SaveChanges();
|
||||
return op.Succcedded(role.id);
|
||||
@@ -254,8 +259,26 @@ namespace AccountManagement.Application
|
||||
var entity = _subAccountRoleRepository.Get(cmd.Id);
|
||||
if (entity == null)
|
||||
return op.Failed(ApplicationMessages.RecordNotFound);
|
||||
entity.Edit(cmd.Title, cmd.Permissions);
|
||||
_subAccountRoleRepository.SaveChanges();
|
||||
entity.Edit(cmd.Title, cmd.Permissions,cmd.WorkshopIds);
|
||||
|
||||
var subAccountRoles = _subAccountRepository.GetBySubAccountRole(cmd.Id);
|
||||
|
||||
foreach (var subAccount in subAccountRoles)
|
||||
{
|
||||
var workshopSubAccounts = _workshopSubAccountRepository.GetWorkshopsSubAccountEntityBySubAccountId(subAccount.id);
|
||||
foreach (var workshopSubAccount in workshopSubAccounts)
|
||||
_workshopSubAccountRepository.Remove(workshopSubAccount);
|
||||
|
||||
|
||||
var workshops = cmd.WorkshopIds.Select(x => new WorkshopSubAccount(x, subAccount.id));
|
||||
|
||||
foreach (var w in workshops)
|
||||
_workshopSubAccountRepository.Create(w);
|
||||
}
|
||||
|
||||
_subAccountRoleRepository.SaveChanges();
|
||||
_workshopSubAccountRepository.SaveChanges();
|
||||
|
||||
return op.Succcedded();
|
||||
}
|
||||
public OperationResult AssignRoleToSubAccount(AssignSubAccountRole command)
|
||||
|
||||
@@ -16,6 +16,7 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace AccountManagement.Application;
|
||||
@@ -508,6 +509,11 @@ public class TaskApplication : ITaskApplication
|
||||
return _taskRepository.GetTasksHaveTicket(searchModel);
|
||||
}
|
||||
|
||||
public List<TaskViewModel> GetTaskScheduleList(TaskSearchModel searchModel)
|
||||
{
|
||||
return _taskRepository.GetTaskScheduleList(searchModel);
|
||||
}
|
||||
|
||||
//ساخت درخواست مهلت
|
||||
public OperationResult CreateRequestTime(CreateTaskTimeRequest command)
|
||||
{
|
||||
@@ -589,6 +595,9 @@ public class TaskApplication : ITaskApplication
|
||||
{
|
||||
return operation.Failed("تاریخی برای درخواست وظیفه ثبت نشده است");
|
||||
}
|
||||
|
||||
|
||||
|
||||
assign.AcceptTimeRequest();
|
||||
message = string.IsNullOrWhiteSpace(message) ? "درخواست شما مورد تایید قرار گرفت" : message;
|
||||
var messageEntity = new TaskMessage(message, "تایید درخواست مهلت", assign.id);
|
||||
@@ -613,6 +622,7 @@ public class TaskApplication : ITaskApplication
|
||||
{
|
||||
return operation.Failed("چنین وظیفه ای درخواستی برای مهلت ندارد");
|
||||
}
|
||||
|
||||
assign.RejectTimeRequest();
|
||||
if (assign.EndTaskDate.Date <= DateTime.Now.Date)
|
||||
{
|
||||
@@ -865,14 +875,14 @@ public class TaskApplication : ITaskApplication
|
||||
return _taskRepository.AllRequestedTasks(searchModel);
|
||||
}
|
||||
|
||||
public int TasksHaveTicketCounts(long userId)
|
||||
public async Task<int> TasksHaveTicketCounts(long userId)
|
||||
{
|
||||
return _taskRepository.TasksHaveTicketCounts(userId);
|
||||
return await _taskRepository.TasksHaveTicketCounts(userId);
|
||||
}
|
||||
|
||||
public int TasksHaveTicketRequestsCount(long userId)
|
||||
public async Task<int> TasksHaveTicketRequestsCount(long userId)
|
||||
{
|
||||
return _taskRepository.TasksHaveTicketRequestsCount(userId);
|
||||
return await _taskRepository.TasksHaveTicketRequestsCount(userId);
|
||||
}
|
||||
|
||||
|
||||
@@ -881,9 +891,9 @@ public class TaskApplication : ITaskApplication
|
||||
return _taskMessageRepository.GetTaskMessages(assignId);
|
||||
}
|
||||
|
||||
public int GetRequestedTasksCount()
|
||||
public async Task<int> GetRequestedTasksCount()
|
||||
{
|
||||
return _taskRepository.GetRequestedTasksCount();
|
||||
return await _taskRepository.GetRequestedTasksCount();
|
||||
}
|
||||
|
||||
public OperationResult ChangeRequestTimeAndAccept(string time, long taskId, long assignedId, string message)
|
||||
@@ -1007,15 +1017,15 @@ public class TaskApplication : ITaskApplication
|
||||
return _assignRepository.GetAssignsByTaskId(taskId);
|
||||
}
|
||||
|
||||
public int RequestedAndOverdueTasksCount(long userId)
|
||||
public async Task<int> RequestedAndOverdueTasksCount(long userId)
|
||||
{
|
||||
return _taskRepository.RequestedAndOverdueTasksCount(userId);
|
||||
return await _taskRepository.RequestedAndOverdueTasksCount(userId);
|
||||
|
||||
}
|
||||
|
||||
public int OverdueTasksCount(long userId)
|
||||
public async Task<int> OverdueTasksCount(long userId)
|
||||
{
|
||||
return _taskRepository.OverdueTasksCount(userId);
|
||||
return await _taskRepository.OverdueTasksCount(userId);
|
||||
}
|
||||
|
||||
//public OperationResult MoveDataFRomTaskToAssign()
|
||||
|
||||
@@ -4,222 +4,355 @@ using AccountManagement.Application.Contracts.TaskSchedule;
|
||||
using AccountManagement.Domain.TaskScheduleAgg;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
using AccountManagement.Domain.TaskAgg;
|
||||
using Company.Domain.HolidayItemAgg;
|
||||
|
||||
namespace AccountManagement.Application;
|
||||
|
||||
public class TaskScheduleApplication : ITaskScheduleApplication
|
||||
{
|
||||
private readonly ITaskApplication _taskApplication;
|
||||
private readonly ITaskScheduleRepository _taskScheduleRepository;
|
||||
private readonly IHolidayItemRepository _holidayItemRepository;
|
||||
private readonly ITaskApplication _taskApplication;
|
||||
private readonly ITaskScheduleRepository _taskScheduleRepository;
|
||||
private readonly IHolidayItemRepository _holidayItemRepository;
|
||||
private readonly ITaskRepository _taskRepository;
|
||||
public TaskScheduleApplication(ITaskApplication taskApplication, ITaskScheduleRepository taskScheduleRepository, IHolidayItemRepository holidayItemRepository, ITaskRepository taskRepository)
|
||||
{
|
||||
_taskApplication = taskApplication;
|
||||
_taskScheduleRepository = taskScheduleRepository;
|
||||
_holidayItemRepository = holidayItemRepository;
|
||||
_taskRepository = taskRepository;
|
||||
}
|
||||
|
||||
public TaskScheduleApplication(ITaskApplication taskApplication, ITaskScheduleRepository taskScheduleRepository, IHolidayItemRepository holidayItemRepository)
|
||||
{
|
||||
_taskApplication = taskApplication;
|
||||
_taskScheduleRepository = taskScheduleRepository;
|
||||
_holidayItemRepository = holidayItemRepository;
|
||||
}
|
||||
|
||||
public OperationResult Create(CreateTask command)
|
||||
{
|
||||
OperationResult operation = new OperationResult();
|
||||
public OperationResult Create(CreateTask command)
|
||||
{
|
||||
OperationResult operation = new OperationResult();
|
||||
|
||||
|
||||
if (command.HasSchedule)
|
||||
{
|
||||
switch (command.ScheduleType)
|
||||
{
|
||||
case "limited":
|
||||
if (Convert.ToInt32(command.ScheduleCount) > 60)
|
||||
{
|
||||
return operation.Failed("تعداد وارد شده بیشتر از حد مجاز است");
|
||||
}
|
||||
return CreateLimitedTasks(command);
|
||||
break;
|
||||
if (command.HasSchedule)
|
||||
{
|
||||
switch (command.ScheduleType)
|
||||
{
|
||||
case TaskScheduleType.Limited:
|
||||
if (Convert.ToInt32(command.ScheduleCount) > 60)
|
||||
{
|
||||
return operation.Failed("تعداد وارد شده بیشتر از حد مجاز است");
|
||||
}
|
||||
return CreateLimitedTasks(command);
|
||||
break;
|
||||
|
||||
case "unlimited":
|
||||
return CreateUnlimitedTasks(command);
|
||||
break;
|
||||
case TaskScheduleType.Unlimited:
|
||||
return CreateUnlimitedTasks(command);
|
||||
break;
|
||||
|
||||
default:
|
||||
return operation.Failed("خطای سیستمی!");
|
||||
default:
|
||||
return operation.Failed("نوع وظیفه محول شده مشخص نمیباشد");
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return operation.Failed("این تسک بصورت زمان بندی شده نمیباشد");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return operation.Failed("این تسک بصورت دوره ای نمیباشد");
|
||||
}
|
||||
}
|
||||
|
||||
public OperationResult CreateLimitedTasks(CreateTask command)
|
||||
{
|
||||
OperationResult operation = new OperationResult();
|
||||
if (Convert.ToInt32(command.ScheduleCount) < 1 || string.IsNullOrWhiteSpace(command.ScheduleCount))
|
||||
{
|
||||
return operation.Failed("تعداد وارد شده باید بیشتر از 2 باشد");
|
||||
}
|
||||
public async Task<TaskScheduleDetailsViewModel> GetDetails(long id)
|
||||
{
|
||||
return await _taskScheduleRepository.GetDetails(id);
|
||||
}
|
||||
|
||||
switch (command.ScheduleUnitType)
|
||||
{
|
||||
case "year":
|
||||
if (Convert.ToInt32(command.ScheduleCount) != 1)
|
||||
{
|
||||
return operation.Failed("دوره نمیتواند بیشتر از 1 سال باشد");
|
||||
}
|
||||
break;
|
||||
case "month":
|
||||
if (Convert.ToInt32(command.ScheduleCount) > 12)
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
break;
|
||||
case "week":
|
||||
if (command.ScheduleUnitNumber != "first" && command.ScheduleUnitNumber != "last")
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
break;
|
||||
case "day":
|
||||
if (Convert.ToInt32(command.ScheduleUnitNumber) > 29)
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return operation.Failed("نوع بازه مشخص نمیباشد");
|
||||
break;
|
||||
public OperationResult Remove(long taskScheduleId)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
var taskSchedule = _taskScheduleRepository.Get(taskScheduleId);
|
||||
if (taskSchedule == null)
|
||||
return op.Failed("وظیفه مورد نظر یافت نشد");
|
||||
var tasks = _taskRepository.GetTasksByTaskScheduleId(taskScheduleId);
|
||||
var assigns = tasks.SelectMany(x => x.Assigns);
|
||||
if (assigns.Any(x => x.IsCanceledRequest || x.IsDone || x.IsCancel || x.TimeRequest || x.AcceptedTimeRequest > 0))
|
||||
{
|
||||
taskSchedule.DeActive();
|
||||
|
||||
}
|
||||
try
|
||||
{
|
||||
DateTime previousDateRaw = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
|
||||
DateTime previousDateEdited = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
|
||||
var removableTask = tasks.Where(x=>x.Assigns.All(a=>a.IsDone==false && a.IsCancel == false)).ToList();
|
||||
_taskRepository.RemoveRange(removableTask);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_taskScheduleRepository.Remove(taskSchedule);
|
||||
_taskRepository.RemoveRange(tasks);
|
||||
}
|
||||
_taskRepository.SaveChanges();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
int count = Convert.ToInt32(command.ScheduleCount);
|
||||
bool isInt = int.TryParse(command.ScheduleUnitNumber, out int unitNumber);
|
||||
string kindOfWeekUnit = isInt ? "" : command.ScheduleUnitNumber;
|
||||
var taskSchedule = new TaskSchedule(command.ScheduleCount, command.ScheduleType, command.ScheduleUnitType,
|
||||
command.ScheduleUnitNumber, previousDateEdited);
|
||||
_taskScheduleRepository.Create(taskSchedule);
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
command.TaskScheduleId = taskSchedule.id;
|
||||
private OperationResult CreateLimitedTasks(CreateTask command)
|
||||
{
|
||||
OperationResult operation = new OperationResult();
|
||||
if (Convert.ToInt32(command.ScheduleCount) < 1 || string.IsNullOrWhiteSpace(command.ScheduleCount))
|
||||
{
|
||||
return operation.Failed("تعداد وارد شده باید بیشتر از 2 باشد");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(command.ScheduleUnitNumber))
|
||||
{
|
||||
return operation.Failed("لطفا تعداد بازه خود را مشخص کنید");
|
||||
}
|
||||
|
||||
switch (command.ScheduleUnitType)
|
||||
{
|
||||
case "year":
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
switch (command.ScheduleUnitType)
|
||||
{
|
||||
case TaskScheduleUnitType.Year:
|
||||
if (Convert.ToInt32(command.ScheduleCount) != 1)
|
||||
{
|
||||
return operation.Failed("دوره نمیتواند بیشتر از 1 سال باشد");
|
||||
}
|
||||
break;
|
||||
case TaskScheduleUnitType.Month:
|
||||
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
if (Convert.ToInt32(command.ScheduleUnitNumber) is > 12 or < 1)
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
|
||||
}
|
||||
previousDateRaw = previousDateRaw.AddYears(unitNumber);
|
||||
previousDateEdited = previousDateRaw;
|
||||
if (Convert.ToInt32(command.ScheduleCount) is > 60 or < 1)
|
||||
{
|
||||
return operation.Failed("تعداد دفعات وارد شده نامعتبر است");
|
||||
}
|
||||
break;
|
||||
case TaskScheduleUnitType.Week:
|
||||
if (command.ScheduleUnitNumber != "first" && command.ScheduleUnitNumber != "last")
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
break;
|
||||
case TaskScheduleUnitType.Day:
|
||||
if (Convert.ToInt32(command.ScheduleUnitNumber) is > 29 or < 1)
|
||||
{
|
||||
return operation.Failed("بازه وارد شده نا معتبر است");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return operation.Failed("نوع بازه مشخص نمیباشد");
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
try
|
||||
{
|
||||
//using var transaction = new TransactionScope();
|
||||
DateTime previousDateRaw = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
|
||||
DateTime previousDateEdited = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
|
||||
var day = Convert.ToInt32(command.EndTaskDate.Substring(8, 2));
|
||||
var month = Convert.ToInt32(command.EndTaskDate.Substring(5, 2));
|
||||
var year = Convert.ToInt32(command.EndTaskDate.Substring(0, 4));
|
||||
|
||||
case "month":
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
int count = Convert.ToInt32(command.ScheduleCount);
|
||||
bool isInt = int.TryParse(command.ScheduleUnitNumber, out int unitNumber);
|
||||
string kindOfWeekUnit = isInt ? "" : command.ScheduleUnitNumber;
|
||||
var taskSchedule = new TaskSchedule(command.ScheduleCount, command.ScheduleType, command.ScheduleUnitType,
|
||||
command.ScheduleUnitNumber, previousDateEdited);
|
||||
_taskScheduleRepository.Create(taskSchedule);
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
command.TaskScheduleId = taskSchedule.id;
|
||||
|
||||
}
|
||||
previousDateRaw = previousDateRaw.AddMonths(unitNumber);
|
||||
previousDateEdited = previousDateRaw;
|
||||
switch (command.ScheduleUnitType)
|
||||
{
|
||||
case TaskScheduleUnitType.Year:
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
|
||||
}
|
||||
break;
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
}
|
||||
previousDateRaw = previousDateRaw.AddYears(unitNumber);
|
||||
previousDateEdited = previousDateRaw;
|
||||
}
|
||||
break;
|
||||
|
||||
case "week":
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(kindOfWeekUnit))
|
||||
{
|
||||
throw new InvalidDataException();
|
||||
}
|
||||
case TaskScheduleUnitType.Month:
|
||||
bool endOfMonth = day == 31;
|
||||
|
||||
command.EndTaskDate = kindOfWeekUnit switch
|
||||
{
|
||||
"first" => previousDateRaw.GetNextDayOfWeek(DayOfWeek.Saturday).ToFarsi(),
|
||||
"last" => previousDateRaw.GetNextDayOfWeek(DayOfWeek.Thursday).ToFarsi(),
|
||||
_ => throw new InvalidDataException()
|
||||
};
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
if (endOfMonth)
|
||||
{
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
if (month >= 12)
|
||||
{
|
||||
var extra = month - 12;
|
||||
year++;
|
||||
month = extra + unitNumber;
|
||||
}
|
||||
else
|
||||
{
|
||||
month = unitNumber + month;
|
||||
}
|
||||
previousDateRaw = $"{year:0000}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime();
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
|
||||
}
|
||||
previousDateRaw = command.EndTaskDate.ToGeorgianDateTime();
|
||||
previousDateEdited = previousDateRaw;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case "day":
|
||||
previousDateEdited = previousDateRaw;
|
||||
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
previousDateRaw = previousDateRaw.AddDays(unitNumber);
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 1; i < count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
var endDay = 0;
|
||||
|
||||
}
|
||||
if (month >= 12)
|
||||
{
|
||||
var extra = month - 12;
|
||||
year++;
|
||||
month = extra + unitNumber;
|
||||
|
||||
previousDateEdited = previousDateRaw;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
month = unitNumber + month;
|
||||
}
|
||||
|
||||
}
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
operation = operation.Succcedded();
|
||||
return operation;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return operation.Failed(e.ToString());
|
||||
}
|
||||
}
|
||||
if (day == 30)
|
||||
{
|
||||
if (month == 12)
|
||||
{
|
||||
var lastYearDay = Convert.ToInt32($"{year:0000}/{month:00}/1".FindeEndOfMonth()
|
||||
.Substring(8, 2));
|
||||
endDay = lastYearDay == 30 ? lastYearDay : 29;
|
||||
}
|
||||
|
||||
public OperationResult CreateUnlimitedTasks(CreateTask command)
|
||||
{
|
||||
var operation = _taskApplication.CreateTask(command);
|
||||
if (!operation.IsSuccedded)
|
||||
return operation;
|
||||
var lastDate = command.EndTaskDate.ToGeorgianDateTime();
|
||||
var taskSchedule = new TaskSchedule(command.ScheduleCount, command.ScheduleType, command.ScheduleUnitType,
|
||||
command.ScheduleUnitNumber, lastDate);
|
||||
_taskScheduleRepository.Create(taskSchedule);
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
}
|
||||
previousDateEdited = endDay == 0
|
||||
? $"{year:0000}/{month:00}/{day:00}".ToGeorgianDateTime()
|
||||
: $"{year:0000}/{month:00}/{endDay:00}".ToGeorgianDateTime();
|
||||
}
|
||||
|
||||
|
||||
//for (int i = 1; i <= count; i++)
|
||||
//{
|
||||
// command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
// operation = _taskApplication.CreateTask(command);
|
||||
// taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
// previousDateRaw = $"{year:0000}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime();
|
||||
// bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
// while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
// {
|
||||
// previousDateEdited = previousDateRaw.AddDays(1);
|
||||
// isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
|
||||
// }
|
||||
// previousDateEdited = previousDateRaw;
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case TaskScheduleUnitType.Week:
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(kindOfWeekUnit))
|
||||
{
|
||||
throw new InvalidDataException();
|
||||
}
|
||||
|
||||
command.EndTaskDate = kindOfWeekUnit switch
|
||||
{
|
||||
"first" => previousDateRaw.GetNextDayOfWeek(DayOfWeek.Saturday).ToFarsi(),
|
||||
"last" => previousDateRaw.GetNextDayOfWeek(DayOfWeek.Thursday).ToFarsi(),
|
||||
_ => throw new InvalidDataException()
|
||||
};
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
|
||||
}
|
||||
previousDateRaw = command.EndTaskDate.ToGeorgianDateTime();
|
||||
previousDateEdited = previousDateRaw;
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case TaskScheduleUnitType.Day:
|
||||
|
||||
for (int i = 1; i <= count; i++)
|
||||
{
|
||||
command.EndTaskDate = previousDateEdited.ToFarsi();
|
||||
operation = _taskApplication.CreateTask(command);
|
||||
taskSchedule.SetLastEndTaskDate(previousDateEdited);
|
||||
previousDateRaw = previousDateRaw.AddDays(unitNumber);
|
||||
bool isHoliday = _holidayItemRepository.GetHoliday(previousDateRaw);
|
||||
while (isHoliday || previousDateEdited.DayOfWeek == DayOfWeek.Friday)
|
||||
{
|
||||
previousDateEdited = previousDateRaw.AddDays(1);
|
||||
isHoliday = _holidayItemRepository.GetHoliday(previousDateEdited);
|
||||
|
||||
}
|
||||
|
||||
previousDateEdited = previousDateRaw;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
//transaction.Complete();
|
||||
operation = operation.Succcedded();
|
||||
return operation;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return operation.Failed(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private OperationResult CreateUnlimitedTasks(CreateTask command)
|
||||
{
|
||||
using var transaction = new TransactionScope();
|
||||
|
||||
var lastDate = command.EndTaskDate.ToGeorgianDateTime();
|
||||
|
||||
var taskSchedule = new TaskSchedule(command.ScheduleCount, command.ScheduleType, command.ScheduleUnitType,
|
||||
command.ScheduleUnitNumber, lastDate);
|
||||
|
||||
_taskScheduleRepository.Create(taskSchedule);
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
|
||||
command.TaskScheduleId = taskSchedule.id;
|
||||
|
||||
var operation = _taskApplication.CreateTask(command);
|
||||
if (!operation.IsSuccedded)
|
||||
return operation;
|
||||
|
||||
|
||||
_taskScheduleRepository.SaveChanges();
|
||||
transaction.Complete();
|
||||
return operation.Succcedded();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.TaskSubject;
|
||||
using AccountManagement.Domain.TaskSubjectAgg;
|
||||
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
|
||||
|
||||
namespace AccountManagement.Application;
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ using AccountManagement.Application.Contracts.Role;
|
||||
using AccountManagement.Application.Contracts.SubAccount;
|
||||
using AccountManagement.Application.Contracts.SubAccountPermissionSubtitle;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
using AccountManagement.Application.Contracts.TaskSchedule;
|
||||
using AccountManagement.Application.Contracts.TaskSubject;
|
||||
using AccountManagement.Application.Contracts.Ticket;
|
||||
using AccountManagement.Application.Contracts.TicketAccessAccount;
|
||||
@@ -25,6 +26,7 @@ using AccountManagement.Domain.SubAccountPermissionSubtitle4Agg;
|
||||
using AccountManagement.Domain.SubAccountRoleAgg;
|
||||
using AccountManagement.Domain.TaskAgg;
|
||||
using AccountManagement.Domain.TaskMessageAgg;
|
||||
using AccountManagement.Domain.TaskScheduleAgg;
|
||||
using AccountManagement.Domain.TaskSubjectAgg;
|
||||
using AccountManagement.Domain.TicketAccessAccountAgg;
|
||||
using AccountManagement.Domain.TicketAgg;
|
||||
@@ -62,6 +64,8 @@ namespace AccountManagement.Configuration
|
||||
services.AddScoped<ITaskRepository, TaskRepository>();
|
||||
services.AddTransient<ITaskApplication, TaskApplication>();
|
||||
|
||||
services.AddTransient<ITaskScheduleApplication, TaskScheduleApplication>();
|
||||
services.AddTransient<ITaskScheduleRepository, TaskScheduleRepository>();
|
||||
|
||||
services.AddTransient<ITaskSubjectRepository, TaskSubjectRepository>();
|
||||
services.AddTransient<ITaskSubjectApplication, TaskSubjectApplication>();
|
||||
|
||||
@@ -27,12 +27,21 @@ namespace AccountManagement.Domain.AccountAgg
|
||||
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
||||
AccountViewModel GetAccountViewModel(long id);
|
||||
List<AccountViewModel> GetAccountsDeactivePositionValue(long Positionid);
|
||||
Task<List<AccountSelectListViewModel>> GetAdminSelectList();
|
||||
|
||||
#endregion
|
||||
|
||||
List<AccountViewModel> GetAdminAccountsNew();
|
||||
|
||||
List<AccountViewModel> GetAccountsToEditWorkshop(long workshopId);
|
||||
|
||||
/// <summary>
|
||||
/// چک میکند که اکانتی با این ام کاربری وجود دارد یا نه
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <returns></returns>
|
||||
public bool CheckExistClientAccount(string userName);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace AccountManagement.Domain.AssignAgg;
|
||||
|
||||
public class Assign : EntityBase
|
||||
{
|
||||
public Assign(long taskId, long assignerId, long assignedId, int assignerPositionValue, string assignedName, int assignedPositionValue, DateTime endTaskDate, bool firstTimeCreation = false)
|
||||
public Assign(long taskId, long assignerId, long assignedId, int assignerPositionValue, string assignedName, int assignedPositionValue, DateTime endTaskDate, bool firstTimeCreation=false)
|
||||
{
|
||||
TaskId = taskId;
|
||||
AssignerId = assignerId;
|
||||
@@ -18,7 +18,7 @@ public class Assign : EntityBase
|
||||
AssignedPositionValue = assignedPositionValue;
|
||||
EndTaskDate = endTaskDate;
|
||||
FirstTimeCreation = firstTimeCreation;
|
||||
}
|
||||
}
|
||||
|
||||
//آیدی شخص ارسال کننده
|
||||
public long TaskId { get; private set; }
|
||||
@@ -52,7 +52,9 @@ public class Assign : EntityBase
|
||||
|
||||
public string? DoneDescription { get; private set; }
|
||||
public bool IsCanceledRequest { get; private set; }
|
||||
|
||||
public bool FirstTimeCreation { get; private set; }
|
||||
|
||||
public Tasks Task { get; set; }
|
||||
public List<TaskMessage> TaskMessageList { get; set; }
|
||||
|
||||
@@ -69,14 +71,16 @@ public class Assign : EntityBase
|
||||
|
||||
public void AcceptTimeRequest()
|
||||
{
|
||||
TimeRequest = false;
|
||||
ClearRequests();
|
||||
TimeRequest = false;
|
||||
AcceptedTimeRequest++;
|
||||
EndTaskDate = RequestDate.Value;
|
||||
EndTaskDate = RequestDate < DateTime.Today ? DateTime.Today : RequestDate.Value;
|
||||
|
||||
}
|
||||
}
|
||||
public void RejectTimeRequest()
|
||||
{
|
||||
TimeRequest = false;
|
||||
ClearRequests();
|
||||
TimeRequest = false;
|
||||
TimeRequestDescription = null;
|
||||
RequestDate = null;
|
||||
}
|
||||
@@ -90,31 +94,36 @@ public class Assign : EntityBase
|
||||
}
|
||||
public void AcceptCancelRequest()
|
||||
{
|
||||
IsCanceledRequest = false;
|
||||
ClearRequests();
|
||||
IsCanceledRequest = false;
|
||||
IsCancel = true;
|
||||
|
||||
|
||||
}
|
||||
public void RejectCancel()
|
||||
{
|
||||
CancelDescription = null;
|
||||
ClearRequests();
|
||||
CancelDescription = null;
|
||||
IsCanceledRequest = false;
|
||||
}
|
||||
|
||||
public void CompleteRequest(string? doneDescription)
|
||||
{
|
||||
DoneDescription = doneDescription;
|
||||
ClearRequests();
|
||||
DoneDescription = doneDescription;
|
||||
IsDoneRequest = true;
|
||||
}
|
||||
|
||||
public void RejectCompleteRequest()
|
||||
{
|
||||
IsDoneRequest = false;
|
||||
ClearRequests();
|
||||
IsDoneRequest = false;
|
||||
DoneDescription = null;
|
||||
}
|
||||
public void Completed()
|
||||
{
|
||||
IsDoneRequest = false;
|
||||
ClearRequests();
|
||||
IsDoneRequest = false;
|
||||
IsDone = true;
|
||||
}
|
||||
|
||||
@@ -126,6 +135,13 @@ public class Assign : EntityBase
|
||||
TimeRequest = false;
|
||||
}
|
||||
|
||||
public void ClearRequests()
|
||||
{
|
||||
IsDoneRequest = false;
|
||||
IsCanceledRequest = false;
|
||||
TimeRequest = false;
|
||||
}
|
||||
|
||||
public void InsertNewData(DateTime endTaskDate,bool timeRequest,int acceptedTimeRequest,DateTime? requestDate, string timeRequestDescription, bool isCanceledRequest,
|
||||
bool isCancel,string cancelDescription,bool isDone,bool isDoneRequest,string? doneDescription)
|
||||
{
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using AccountManagement.Application.Contracts.Media;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
|
||||
namespace AccountManagement.Domain.MediaAgg;
|
||||
|
||||
public interface IMediaRepository:IRepository<long,Media>
|
||||
public interface IMediaRepository : IRepository<long, Media>
|
||||
{
|
||||
public string BasePath { get; protected set; }
|
||||
void CreateMediaWithTaskMedia(long taskId, long mediaId);
|
||||
List<MediaViewModel> GetMediaByTaskId(long taskId);
|
||||
void Remove(long id);
|
||||
@@ -23,4 +26,6 @@ public interface IMediaRepository:IRepository<long,Media>
|
||||
|
||||
#endregion
|
||||
|
||||
OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||
List<string> allowedExtensions, string category);
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using _0_Framework.Domain;
|
||||
using AccountManagement.Application.Contracts.SubAccount;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace AccountManagement.Domain.SubAccountAgg
|
||||
{
|
||||
@@ -13,5 +14,6 @@ namespace AccountManagement.Domain.SubAccountAgg
|
||||
SubAccount GetDetails(long subAccountId);
|
||||
SubAccount GetBy(string commandUsername);
|
||||
SubAccountViewModel GetByVerifyCodeAndPhoneNumber(string code, string phone);
|
||||
List<SubAccount> GetBySubAccountRole(long subAccountRoleId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,17 +13,21 @@ namespace AccountManagement.Domain.SubAccountRoleAgg
|
||||
|
||||
public List<SubAccountRolePermission> RolePermissions { get; private set; }
|
||||
public List<SubAccount> SubAccounts { get; private set; }
|
||||
public List<SubAccountRoleWorkshop> RoleWorkshops { get; set; }
|
||||
|
||||
private SubAccountRole()
|
||||
{
|
||||
}
|
||||
|
||||
public SubAccountRole(string title, List<int> permissions, long accountId)
|
||||
public SubAccountRole(string title, List<int> permissions, long accountId, List<long> workshopIds)
|
||||
{
|
||||
Title = title;
|
||||
RolePermissions = permissions.Select(x => new SubAccountRolePermission(x, id)).ToList();
|
||||
AccountId = accountId;
|
||||
RoleWorkshops = workshopIds.Select(x => new SubAccountRoleWorkshop(x, id)).ToList();
|
||||
|
||||
}
|
||||
|
||||
public void ChangeTitle(string title)
|
||||
{
|
||||
Title = title;
|
||||
@@ -32,10 +36,12 @@ namespace AccountManagement.Domain.SubAccountRoleAgg
|
||||
{
|
||||
RolePermissions.AddRange(permissionIds.Select(x => new SubAccountRolePermission(x, id)));
|
||||
}
|
||||
public void Edit(string title, List<int> permissions)
|
||||
public void Edit(string title, List<int> permissions,List<long> workshopIds)
|
||||
{
|
||||
Title = title;
|
||||
RolePermissions = permissions.Select(x => new SubAccountRolePermission(x, id)).ToList();
|
||||
}
|
||||
}
|
||||
RoleWorkshops = workshopIds.Select(x => new SubAccountRoleWorkshop(x, id)).ToList();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using _0_Framework.Domain;
|
||||
|
||||
namespace AccountManagement.Domain.SubAccountRoleAgg;
|
||||
|
||||
public class SubAccountRoleWorkshop:EntityBase
|
||||
{
|
||||
public SubAccountRoleWorkshop(long workshopId, long subAccountId)
|
||||
{
|
||||
WorkshopId = workshopId;
|
||||
SubAccountId = subAccountId;
|
||||
}
|
||||
|
||||
public long WorkshopId { get; set; }
|
||||
public long SubAccountId { get; set; }
|
||||
public SubAccountRole SubAccountRole { get; set; }
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
@@ -88,11 +89,22 @@ public interface ITaskRepository:IRepository<long,Tasks>
|
||||
/// <returns></returns>
|
||||
List<TaskViewModel> GetTasksHaveTicket(TaskSearchModel searchModel);
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// لیست تسک های دوره ای ایجاد شده توسط کاربر
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
List<TaskViewModel> GetTaskScheduleList(TaskSearchModel searchModel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تعداد تسک های درخواستی. بدون تیکت
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetRequestedTasksCount();
|
||||
Task<int> GetRequestedTasksCount();
|
||||
|
||||
/// <summary>
|
||||
/// گرفتن جزئیات درخواست وظیفه
|
||||
@@ -114,39 +126,38 @@ public interface ITaskRepository:IRepository<long,Tasks>
|
||||
/// <returns></returns>
|
||||
bool HasOverdueTasks(long userId);
|
||||
|
||||
/// <summary>
|
||||
///مجوع تعداد تسک های عقب افتاده و درخواستی
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
int RequestedAndOverdueTasksCount(long userId);
|
||||
/// <summary>
|
||||
/// مجوع تعداد تسک های عقب افتاده و درخواستی
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> RequestedAndOverdueTasksCount(long userId);
|
||||
|
||||
/// <summary>
|
||||
/// تعداد تسک های دارای تیکت
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
int TasksHaveTicketCounts(long userId);
|
||||
Task<int> TasksHaveTicketCounts(long userId);
|
||||
|
||||
/// <summary>
|
||||
/// تعداد درخواست های تسک های دارا تیکت
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
int TasksHaveTicketRequestsCount(long userId);
|
||||
Task<int> TasksHaveTicketRequestsCount(long userId);
|
||||
|
||||
/// <summary>
|
||||
///تعداد تسک های شخصی و دریافتی برای امروز و یا عقب افتاده
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
int OverdueTasksCount(long userId);
|
||||
/// <summary>
|
||||
/// تعداد تسک های شخصی و دریافتی برای امروز و یا عقب افتاده
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> OverdueTasksCount(long userId);
|
||||
|
||||
|
||||
// گرفتن پیام های مربوط به هر تسک
|
||||
|
||||
List<Tasks> GetTasksByTaskScheduleId(long taskScheduleId);
|
||||
|
||||
|
||||
//OperationResult MoveDataFRomTaskToAssign();
|
||||
|
||||
void RemoveRange(IEnumerable<Tasks> tasks);
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
using _0_Framework.Domain;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using AccountManagement.Application.Contracts.TaskSchedule;
|
||||
|
||||
namespace AccountManagement.Domain.TaskScheduleAgg;
|
||||
|
||||
public interface ITaskScheduleRepository:IRepository<long,TaskSchedule>
|
||||
public interface ITaskScheduleRepository : IRepository<long, TaskSchedule>
|
||||
{
|
||||
|
||||
Task<TaskScheduleDetailsViewModel> GetDetails(long id);
|
||||
void Remove(TaskSchedule entity);
|
||||
}
|
||||
@@ -1,29 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
using AccountManagement.Domain.TaskAgg;
|
||||
|
||||
namespace AccountManagement.Domain.TaskScheduleAgg;
|
||||
|
||||
public class TaskSchedule:EntityBase
|
||||
{
|
||||
public TaskSchedule(string count, string type, string unitType, string unitNumber, DateTime lastEndTaskDate)
|
||||
public TaskSchedule(string count, TaskScheduleType type, TaskScheduleUnitType unitType, string unitNumber, DateTime lastEndTaskDate)
|
||||
{
|
||||
Count = count;
|
||||
Type = type;
|
||||
UnitType = unitType;
|
||||
UnitNumber = unitNumber;
|
||||
LastEndTaskDate = lastEndTaskDate;
|
||||
IsActive = IsActive.True;
|
||||
}
|
||||
public string Count { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string UnitType { get; private set; }
|
||||
public TaskScheduleType Type { get; private set; }
|
||||
public TaskScheduleUnitType UnitType { get; private set; }
|
||||
public string UnitNumber { get; private set; }
|
||||
public DateTime LastEndTaskDate { get; private set; }
|
||||
public IsActive IsActive { get; private set; }
|
||||
public List<Tasks> TasksList { get; set; }
|
||||
|
||||
public void SetLastEndTaskDate(DateTime lastEndTaskDate)
|
||||
{
|
||||
LastEndTaskDate = lastEndTaskDate;
|
||||
}
|
||||
|
||||
public void DeActive()
|
||||
{
|
||||
IsActive = IsActive.False;
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ using AccountManagement.Domain.SubAccountPermissionSubtitle3Agg;
|
||||
using AccountManagement.Domain.SubAccountPermissionSubtitle4Agg;
|
||||
using AccountManagement.Domain.SubAccountRoleAgg;
|
||||
using AccountMangement.Infrastructure.EFCore.Seed;
|
||||
using AccountManagement.Domain.TaskScheduleAgg;
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore
|
||||
{
|
||||
@@ -57,6 +58,9 @@ namespace AccountMangement.Infrastructure.EFCore
|
||||
|
||||
public DbSet<TicketAccessAccount> TicketAccessAccounts { get; set; }
|
||||
|
||||
public DbSet<TaskSchedule> TaskSchedules { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Pooya
|
||||
|
||||
@@ -21,6 +21,10 @@ namespace AccountMangement.Infrastructure.EFCore.Mappings
|
||||
opt.WithOwner(x => x.SubAccountRole);
|
||||
});
|
||||
|
||||
builder.OwnsMany(x => x.RoleWorkshops, roleWorkshop =>
|
||||
{
|
||||
roleWorkshop.WithOwner(x => x.SubAccountRole).HasForeignKey(x => x.SubAccountId);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,9 +12,10 @@ public class TaskScheduleMapping : IEntityTypeConfiguration<TaskSchedule>
|
||||
builder.HasKey(x => x.id);
|
||||
|
||||
builder.Property(x => x.Count).HasMaxLength(10);
|
||||
builder.Property(x => x.Type).HasMaxLength(12);
|
||||
builder.Property(x => x.Type).HasConversion<string>().HasMaxLength(12);
|
||||
builder.Property(x => x.UnitNumber).HasMaxLength(10);
|
||||
builder.Property(x => x.UnitType).HasMaxLength(10);
|
||||
builder.Property(x => x.UnitType).HasConversion<string>().HasMaxLength(10);
|
||||
builder.Property(x => x.IsActive).HasConversion<string>().HasMaxLength(5);
|
||||
|
||||
builder.HasMany(x => x.TasksList).WithOne(x => x.TaskSchedule)
|
||||
.HasForeignKey(x => x.TaskScheduleId);
|
||||
|
||||
1274
AccountMangement.Infrastructure.EFCore/Migrations/20250407150638_add TaskSchedule.Designer.cs
generated
Normal file
1274
AccountMangement.Infrastructure.EFCore/Migrations/20250407150638_add TaskSchedule.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,74 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class addTaskSchedule : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "UnitType",
|
||||
table: "TaskSchedules",
|
||||
type: "nvarchar(10)",
|
||||
maxLength: 10,
|
||||
nullable: false,
|
||||
defaultValue: "",
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(10)",
|
||||
oldMaxLength: 10,
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Type",
|
||||
table: "TaskSchedules",
|
||||
type: "nvarchar(12)",
|
||||
maxLength: 12,
|
||||
nullable: false,
|
||||
defaultValue: "",
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(12)",
|
||||
oldMaxLength: 12,
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "IsCanceled",
|
||||
table: "TaskSchedules",
|
||||
type: "nvarchar(5)",
|
||||
maxLength: 5,
|
||||
nullable: false,
|
||||
defaultValue: "");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IsCanceled",
|
||||
table: "TaskSchedules");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "UnitType",
|
||||
table: "TaskSchedules",
|
||||
type: "nvarchar(10)",
|
||||
maxLength: 10,
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(10)",
|
||||
oldMaxLength: 10);
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Type",
|
||||
table: "TaskSchedules",
|
||||
type: "nvarchar(12)",
|
||||
maxLength: 12,
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(12)",
|
||||
oldMaxLength: 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
1274
AccountMangement.Infrastructure.EFCore/Migrations/20250416121822_taskSchedule rename isActive.Designer.cs
generated
Normal file
1274
AccountMangement.Infrastructure.EFCore/Migrations/20250416121822_taskSchedule rename isActive.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class taskSchedulerenameisActive : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "IsCanceled",
|
||||
table: "TaskSchedules",
|
||||
newName: "IsActive");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "IsActive",
|
||||
table: "TaskSchedules",
|
||||
newName: "IsCanceled");
|
||||
}
|
||||
}
|
||||
}
|
||||
1303
AccountMangement.Infrastructure.EFCore/Migrations/20250530133036_add workshop to subAccountRole.Designer.cs
generated
Normal file
1303
AccountMangement.Infrastructure.EFCore/Migrations/20250530133036_add workshop to subAccountRole.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class addworkshoptosubAccountRole : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "SubAccountRoleWorkshop",
|
||||
columns: table => new
|
||||
{
|
||||
id = table.Column<long>(type: "bigint", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
SubAccountId = table.Column<long>(type: "bigint", nullable: false),
|
||||
WorkshopId = table.Column<long>(type: "bigint", nullable: false),
|
||||
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_SubAccountRoleWorkshop", x => new { x.SubAccountId, x.id });
|
||||
table.ForeignKey(
|
||||
name: "FK_SubAccountRoleWorkshop_SubAccountRoles_SubAccountId",
|
||||
column: x => x.SubAccountId,
|
||||
principalTable: "SubAccountRoles",
|
||||
principalColumn: "id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "SubAccountRoleWorkshop");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -759,10 +759,16 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
b.Property<DateTime>("CreationDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("IsActive")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("LastEndTaskDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Type")
|
||||
.IsRequired()
|
||||
.HasMaxLength(12)
|
||||
.HasColumnType("nvarchar(12)");
|
||||
|
||||
@@ -771,6 +777,7 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
b.Property<string>("UnitType")
|
||||
.IsRequired()
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
@@ -1071,6 +1078,33 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
|
||||
modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b =>
|
||||
{
|
||||
b.OwnsMany("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRoleWorkshop", "RoleWorkshops", b1 =>
|
||||
{
|
||||
b1.Property<long>("SubAccountId")
|
||||
.HasColumnType("bigint");
|
||||
|
||||
b1.Property<long>("id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("bigint");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("id"));
|
||||
|
||||
b1.Property<DateTime>("CreationDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b1.Property<long>("WorkshopId")
|
||||
.HasColumnType("bigint");
|
||||
|
||||
b1.HasKey("SubAccountId", "id");
|
||||
|
||||
b1.ToTable("SubAccountRoleWorkshop");
|
||||
|
||||
b1.WithOwner("SubAccountRole")
|
||||
.HasForeignKey("SubAccountId");
|
||||
|
||||
b1.Navigation("SubAccountRole");
|
||||
});
|
||||
|
||||
b.OwnsMany("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRolePermission", "RolePermissions", b1 =>
|
||||
{
|
||||
b1.Property<long>("id")
|
||||
@@ -1098,6 +1132,8 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
||||
});
|
||||
|
||||
b.Navigation("RolePermissions");
|
||||
|
||||
b.Navigation("RoleWorkshops");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
|
||||
|
||||
@@ -312,6 +312,17 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
|
||||
IsActiveString = x.IsActive ? "true" : "false",
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
||||
{
|
||||
return await _context.Accounts.Where(x => x.AdminAreaPermission == "true").Select(x => new AccountSelectListViewModel()
|
||||
{
|
||||
Id = x.id,
|
||||
Name = x.Fullname,
|
||||
RoleId = x.RoleId
|
||||
}).ToListAsync();
|
||||
}
|
||||
|
||||
//public List<AccountViewModel> GetAdminAccounts()
|
||||
//{
|
||||
// return _context.Accounts.Where(x=>x.AdminAreaPermission == "true" && x.IsActiveString == "true").Select(x => new AccountViewModel()
|
||||
@@ -332,4 +343,9 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public bool CheckExistClientAccount(string userName)
|
||||
{
|
||||
return _context.Accounts.Any(x => x.Username == userName);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.InfraStructure;
|
||||
using AccountManagement.Application.Contracts.Media;
|
||||
using AccountManagement.Domain.AdminResponseMediaAgg;
|
||||
@@ -7,27 +10,35 @@ using AccountManagement.Domain.ClientResponseMediaAgg;
|
||||
using AccountManagement.Domain.MediaAgg;
|
||||
using AccountManagement.Domain.TaskMediaAgg;
|
||||
using AccountManagement.Domain.TicketMediasAgg;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
||||
|
||||
public class MediaRepository:RepositoryBase<long,Media>,IMediaRepository
|
||||
public class MediaRepository : RepositoryBase<long, Media>, IMediaRepository
|
||||
{
|
||||
private const string _basePath = "Storage/Medias";
|
||||
public string BasePath { get; set; }
|
||||
|
||||
|
||||
private readonly AccountContext _accountContext;
|
||||
public MediaRepository( AccountContext taskManagerContext) : base(taskManagerContext)
|
||||
public MediaRepository(AccountContext taskManagerContext, IWebHostEnvironment webHostEnvironment) : base(taskManagerContext)
|
||||
{
|
||||
_accountContext = taskManagerContext;
|
||||
BasePath = webHostEnvironment.ContentRootPath + "/Storage";
|
||||
}
|
||||
//ساخت جدول واسط بین مدیا و نسک
|
||||
//نکته: این متد ذخیره انجام نمیدهد
|
||||
|
||||
public void CreateMediaWithTaskMedia(long taskId, long mediaId)
|
||||
{
|
||||
var Taskmedias = new TaskMedia(taskId,mediaId);
|
||||
var Taskmedias = new TaskMedia(taskId, mediaId);
|
||||
_accountContext.Add(Taskmedias);
|
||||
}
|
||||
public void Remove(long id)
|
||||
{
|
||||
var media = Get(id);
|
||||
var media = Get(id);
|
||||
Remove(media);
|
||||
}
|
||||
|
||||
@@ -77,6 +88,48 @@ public class MediaRepository:RepositoryBase<long,Media>,IMediaRepository
|
||||
{
|
||||
return _accountContext.Medias.Where(x => mediaIds.Contains(x.id)).ToList();
|
||||
}
|
||||
|
||||
public OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||
List<string> allowedExtensions, string category)
|
||||
{
|
||||
OperationResult op = new();
|
||||
var path = Path.Combine(_basePath, relativePath);
|
||||
var fileExtension = Path.GetExtension(file.FileName);
|
||||
|
||||
if (file == null || file.Length == 0)
|
||||
return op.Failed("خطای سیستمی");
|
||||
|
||||
if (file.Length > (maximumFileLength * 1024 * 1024))
|
||||
return op.Failed($"حجم فایل نمی تواند بیشتر از " +
|
||||
$"{maximumFileLength}" +
|
||||
$"مگابایت باشد");
|
||||
|
||||
if (!allowedExtensions.Contains(fileExtension.ToLower()))
|
||||
{
|
||||
var operationMessage = ":فرمت فایل باید یکی از موارد زیر باشد";
|
||||
operationMessage += "\n";
|
||||
operationMessage += string.Join(" ", allowedExtensions);
|
||||
return op.Failed(operationMessage);
|
||||
}
|
||||
|
||||
|
||||
Directory.CreateDirectory(path);
|
||||
|
||||
var extension = Path.GetExtension(file.FileName);
|
||||
|
||||
var uniqueFileName = $"{fileLabel}-{DateTime.Now.Ticks}{extension}";
|
||||
var filePath = Path.Combine(path, uniqueFileName);
|
||||
using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
|
||||
{
|
||||
file.CopyTo(fileStream);
|
||||
}
|
||||
var mediaEntity = new Media(filePath, extension, "فایل", category);
|
||||
Create(mediaEntity);
|
||||
SaveChanges();
|
||||
|
||||
return op.Succcedded(mediaEntity.id);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -77,5 +77,10 @@ namespace AccountMangement.Infrastructure.EFCore.Repository
|
||||
Username = entity.Username
|
||||
};
|
||||
}
|
||||
|
||||
public List<SubAccount> GetBySubAccountRole(long subAccountRoleId)
|
||||
{
|
||||
return _context.SubAccounts.Where(x => x.SubAccountRoleId == subAccountRoleId).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using _0_Framework.InfraStructure;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using AccountManagement.Application.Contracts.Assign;
|
||||
@@ -46,7 +47,6 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
|
||||
public EditTask GetDetails(long TaskId)
|
||||
{
|
||||
var task = Get(TaskId);
|
||||
|
||||
var userId = _authHelper.CurrentAccountId();
|
||||
|
||||
@@ -94,7 +94,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
Fullname = a.Fullname,
|
||||
Id = a.id,
|
||||
|
||||
}).FirstOrDefault()
|
||||
}).FirstOrDefault(),
|
||||
TaskScheduleId = x.TaskScheduleId ?? 0
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
@@ -105,13 +106,26 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
{
|
||||
res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId)
|
||||
.EndTaskDate.ToFarsi();
|
||||
|
||||
var userAssign = res.AssignViewModels.First(x => x.AssignedId == userId);
|
||||
|
||||
res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList();
|
||||
res.IsDone = res.AssignViewModels.First(x => x.AssignedId == userId).IsDone;
|
||||
res.IsCancel = res.AssignViewModels.First(x => x.AssignedId == userId).IsCancel;
|
||||
res.IsDone = userAssign.IsDone;
|
||||
res.IsCancel = userAssign.IsCancel;
|
||||
res.HasRequest = userAssign.IsCanceledRequest || userAssign.TimeRequest ||
|
||||
userAssign.IsDoneRequest;
|
||||
}
|
||||
|
||||
if (res.TaskScheduleId > 0)
|
||||
{
|
||||
var taskSchedule = _accountContext.TaskSchedules.FirstOrDefault(x => x.id == res.TaskScheduleId);
|
||||
|
||||
res.ScheduleUnitType = taskSchedule.UnitType;
|
||||
res.ScheduleType = taskSchedule.Type;
|
||||
res.ScheduleCount = taskSchedule.Count;
|
||||
res.ScheduleUnitNumber = taskSchedule.UnitNumber;
|
||||
}
|
||||
|
||||
|
||||
//_accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask()
|
||||
//{
|
||||
// EndTaskDate = x.EndTaskDate.ToFarsi(),
|
||||
@@ -148,8 +162,6 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
Remove(task);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<TaskViewModel> GetRequestedTasks(TaskSearchModel searchModel)
|
||||
{
|
||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||
@@ -888,7 +900,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel,false),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
@@ -968,7 +980,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
.ThenInclude(x => x.Media)
|
||||
.Where(x =>
|
||||
x.Task.IsActiveString == "true" && (x.AssignerId == accountId && x.AssignedId != accountId) && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null &&
|
||||
x.Task.SenderId == accountId)
|
||||
x.Task.SenderId == accountId && x.Task.TaskScheduleId == null)
|
||||
.Select(x =>
|
||||
new TaskViewModel()
|
||||
{
|
||||
@@ -1217,7 +1229,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
@@ -1776,7 +1788,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
@@ -1839,10 +1851,313 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
return final;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public string SetTasksColors(DateTime date, bool isCancel)
|
||||
public List<TaskViewModel> GetTaskScheduleList(TaskSearchModel searchModel)
|
||||
{
|
||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
||||
var emptyAcc = new AccountViewModel()
|
||||
{
|
||||
Fullname = "-",
|
||||
PositionValue = 0
|
||||
};
|
||||
|
||||
var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
|
||||
.ThenInclude(x => x.Media)
|
||||
.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.TaskSchedule.IsActive== IsActive.True);
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||
{
|
||||
raw = raw.Where(x =>
|
||||
(x.Task.Description != null && x.Task.Description.Contains(searchModel.GeneralSearch))
|
||||
|| x.Task.ContractingPartyName.Contains(searchModel.GeneralSearch)
|
||||
|| x.Task.Title.Contains(searchModel.GeneralSearch));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var query = raw.GroupBy(x => x.Task.TaskScheduleId).Select(x =>
|
||||
new TaskViewModel()
|
||||
{
|
||||
AssignedId = x.First().AssignedId,
|
||||
AssignerId = x.First().AssignerId,
|
||||
CreateDate = x.First().Task.CreationDate.ToFarsi(),
|
||||
EndTaskDateFA = x.First().EndTaskDate.ToFarsi(),
|
||||
IsDone = x.First().IsDone,
|
||||
EndTaskDateGE = x.First().EndTaskDate,
|
||||
Name = x.First().Task.Title,
|
||||
RequestCancel = x.First().IsCanceledRequest,
|
||||
RequestTime = x.First().TimeRequest,
|
||||
Id = x.First().Task.id,
|
||||
CreateTaskDateGE = x.First().Task.CreationDate,
|
||||
IsCancel = x.First().IsCancel,
|
||||
AcceptedTimeRequest = x.First().AcceptedTimeRequest,
|
||||
IsCancelRequest = x.First().IsCanceledRequest,
|
||||
ContractingPartyName = x.First().Task.ContractingPartyName,
|
||||
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.First().Task.id),
|
||||
Description = x.First().Task.Description,
|
||||
IsDoneRequest = x.First().IsDoneRequest,
|
||||
ScheduleType = x.First().Task.TaskSchedule.Type,
|
||||
ScheduleUnitType = x.First().Task.TaskSchedule.UnitType,
|
||||
TaskScheduleId = (long)x.First().Task.TaskScheduleId
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||
{
|
||||
query = query.Where(x =>
|
||||
(x.Description != null && x.Description.Contains(searchModel.GeneralSearch))
|
||||
|| x.ContractingPartyName.Contains(searchModel.GeneralSearch)
|
||||
|| x.Name.Contains(searchModel.GeneralSearch));
|
||||
}
|
||||
|
||||
var res = query.Select(x => new TaskViewModel()
|
||||
{
|
||||
Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
|
||||
{
|
||||
PositionValue = a.Position.PositionValue,
|
||||
Id = a.id,
|
||||
Fullname = a.Fullname,
|
||||
}).FirstOrDefault(a => a.Id == x.AssignerId),
|
||||
|
||||
SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname,
|
||||
|
||||
Assigned = _accountContext.Assigns.Where(a => a.TaskId == x.Id)
|
||||
.Where(a => a.AssignedPositionValue >= positionValue).Select(a => a.AssignedId)
|
||||
.ToList(),
|
||||
CreateDate = x.CreateDate,
|
||||
EndTaskDateFA = x.EndTaskDateFA,
|
||||
IsDone = x.IsDone,
|
||||
EndTaskDateGE = x.EndTaskDateGE,
|
||||
Name = x.Name,
|
||||
RequestCancel = x.RequestCancel,
|
||||
RequestTime = x.RequestTime,
|
||||
Id = x.Id,
|
||||
CreateTaskDateGE = x.CreateTaskDateGE,
|
||||
IsCancel = x.IsCancel,
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
MediaCount = x.MediaCount,
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
ScheduleType = x.ScheduleType,
|
||||
ScheduleUnitType = x.ScheduleUnitType,
|
||||
TaskScheduleId = x.TaskScheduleId
|
||||
});
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
||||
{
|
||||
var start = searchModel.StartDate.ToGeorgianDateTime();
|
||||
var end = searchModel.EndDate.ToGeorgianDateTime();
|
||||
res = res.Where(x =>
|
||||
((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
||||
|
||||
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
||||
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
||||
|
||||
(end < x.EndTaskDateGE && x.EndTaskDateGE > start))
|
||||
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
||||
|
||||
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
||||
|| ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
||||
|
||||
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
|
||||
{
|
||||
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
|
||||
res = res.Where(x => x.IsDoneRequest == isDoneReq);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
|
||||
{
|
||||
bool isDone = bool.Parse(searchModel.IsDone);
|
||||
res = res.Where(x => x.IsDone == isDone);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled))
|
||||
{
|
||||
bool isCancel = bool.Parse(searchModel.IsCanceled);
|
||||
res = res.Where(x => x.IsCancel == isCancel);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest))
|
||||
{
|
||||
bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest);
|
||||
res = res.Where(x => x.RequestTime == isTimeRequest);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted))
|
||||
{
|
||||
res = res.Where(x => x.AcceptedTimeRequest > 0);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest))
|
||||
{
|
||||
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
|
||||
res = res.Where(x => x.IsCancelRequest == isCancelReq);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
var result = res.AsEnumerable();
|
||||
|
||||
|
||||
if (searchModel.AccountId > 0)
|
||||
{
|
||||
result = result.Where(x =>
|
||||
x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
|
||||
}
|
||||
|
||||
|
||||
var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0)
|
||||
.ThenBy(x => x.EndTaskDateGE);
|
||||
|
||||
|
||||
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
|
||||
|
||||
final = final.Select(x => new TaskViewModel()
|
||||
{
|
||||
AssignViewModels = _accountContext.Accounts.Include(x => x.Position)
|
||||
.Where(a => x.Assigned.Contains(a.id) && accountId != a.id)
|
||||
.Select(a => new AssignViewModel()
|
||||
{
|
||||
AssignedName = a.Fullname,
|
||||
AssignedPositionValue = a.Position.PositionValue
|
||||
}).ToList(),
|
||||
Sender = x.Sender,
|
||||
SelfAssigner = x.Sender.Id == accountId ? true : false,
|
||||
Assigned = x.Assigned,
|
||||
SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false,
|
||||
CreateDate = x.CreateDate,
|
||||
EndTaskDateFA = x.EndTaskDateFA,
|
||||
IsDone = x.IsDone,
|
||||
EndTaskDateGE = x.EndTaskDateGE,
|
||||
Name = x.Name,
|
||||
RequestCancel = x.RequestCancel,
|
||||
RequestTime = x.RequestTime,
|
||||
Id = x.Id,
|
||||
CreateTaskDateGE = x.CreateTaskDateGE,
|
||||
IsCancel = x.IsCancel,
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
MediaCount = x.MediaCount,
|
||||
SelfName = x.SelfName,
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
ScheduleType = x.ScheduleType,
|
||||
ScheduleUnitType = x.ScheduleUnitType,
|
||||
TaskScheduleId = x.TaskScheduleId
|
||||
|
||||
|
||||
}).ToList();
|
||||
|
||||
|
||||
final = final.Select(x => new TaskViewModel()
|
||||
{
|
||||
|
||||
AssignList = x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
|
||||
{
|
||||
AssignViewModels = a.ToList(),
|
||||
PosValue = a.Key
|
||||
}).ToList(),
|
||||
Sender = x.Sender,
|
||||
Assigned = x.Assigned,
|
||||
CreateDate = x.CreateDate,
|
||||
EndTaskDateFA = x.EndTaskDateFA,
|
||||
IsDone = x.IsDone,
|
||||
EndTaskDateGE = x.EndTaskDateGE,
|
||||
Name = x.Name,
|
||||
RequestCancel = x.RequestCancel,
|
||||
RequestTime = x.RequestTime,
|
||||
Id = x.Id,
|
||||
CreateTaskDateGE = x.CreateTaskDateGE,
|
||||
IsCancel = x.IsCancel,
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
SelfAssigned = x.SelfAssigned,
|
||||
SelfAssigner = x.SelfAssigner,
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
AssignViewModels = x.AssignViewModels,
|
||||
ScheduleType = x.ScheduleType,
|
||||
ScheduleUnitType = x.ScheduleUnitType,
|
||||
TaskScheduleId = x.TaskScheduleId
|
||||
|
||||
}).ToList();
|
||||
|
||||
final = final.Select(x => new TaskViewModel()
|
||||
{
|
||||
|
||||
AssignList = !(x.SelfAssigned || x.SelfAssigner)
|
||||
? AddAssign(x.AssignList, x.Sender)
|
||||
: x.AssignList,
|
||||
Sender = !(x.SelfAssigned || x.SelfAssigner)
|
||||
? new AccountViewModel()
|
||||
{
|
||||
PositionValue = 0,
|
||||
Fullname = "-"
|
||||
}
|
||||
: x.Sender,
|
||||
Assigned = x.Assigned,
|
||||
CreateDate = x.CreateDate,
|
||||
EndTaskDateFA = x.EndTaskDateFA,
|
||||
IsDone = x.IsDone,
|
||||
EndTaskDateGE = x.EndTaskDateGE,
|
||||
Name = x.Name,
|
||||
RequestCancel = x.RequestCancel,
|
||||
RequestTime = x.RequestTime,
|
||||
Id = x.Id,
|
||||
CreateTaskDateGE = x.CreateTaskDateGE,
|
||||
IsCancel = x.IsCancel,
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.Color,
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.HasAttachment,
|
||||
SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName,
|
||||
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
|
||||
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
|
||||
: "",
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
CanAssign = _positionRepository.GetLastPositionValue() != positionValue,
|
||||
CanDelete = x.Sender.Id == accountId,
|
||||
CanEdit = x.Sender.Id == accountId && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest
|
||||
|| a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))),
|
||||
Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname,
|
||||
AssignedReceiverViewModel = x.AssignViewModels.Any()
|
||||
? x.AssignViewModels.MinBy(a => a.AssignedPositionValue)
|
||||
: new()
|
||||
{
|
||||
AssignedName = "-",
|
||||
AssignedPositionValue = 0
|
||||
},
|
||||
ScheduleType = x.ScheduleType,
|
||||
ScheduleUnitType = x.ScheduleUnitType,
|
||||
TaskScheduleId = x.TaskScheduleId
|
||||
|
||||
}).ToList();
|
||||
return final;
|
||||
}
|
||||
|
||||
public string SetTasksColors(DateTime date, bool isCancel,bool hasRequest)
|
||||
{
|
||||
if (hasRequest)
|
||||
return "red";
|
||||
|
||||
if (isCancel)
|
||||
{
|
||||
//return "brown";
|
||||
@@ -1888,23 +2203,23 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
|
||||
}
|
||||
|
||||
public int GetRequestedTasksCount()
|
||||
public async Task<int> GetRequestedTasksCount()
|
||||
{
|
||||
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||
if (positionValue == 1)
|
||||
{
|
||||
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
return await _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
|
||||
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null).GroupBy(x => x.TaskId)
|
||||
.Select(x => x.First()).Count();
|
||||
.Select(x => x.First()).CountAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
return await _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
|
||||
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null).GroupBy(x => x.TaskId)
|
||||
.Select(x => x.First()).Count();
|
||||
.Select(x => x.First()).CountAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2001,7 +2316,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
|
||||
}
|
||||
|
||||
public int RequestedAndOverdueTasksCount(long userId)
|
||||
public async Task<int> RequestedAndOverdueTasksCount(long userId)
|
||||
{
|
||||
var account = _accountRepository.GetIncludePositions(userId);
|
||||
if (account.Position == null)
|
||||
@@ -2009,7 +2324,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
|
||||
DateTime now = DateTime.Now;
|
||||
|
||||
var overdueTasksCount = OverdueTasksCount(userId);
|
||||
var overdueTasksCount = await OverdueTasksCount(userId);
|
||||
|
||||
|
||||
//overdueTasksCount = _accountContext.Tasks.Include(x =>
|
||||
@@ -2018,10 +2333,10 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
// !x.Assigns.Any(a => a.TimeRequest)
|
||||
// && x.Assigns.Any(a => a.AssignedId == userId) &&
|
||||
// (x.Assigns.First(a => a.AssignedId == userId).EndTaskDate.Date <= DateTime.Now.Date));
|
||||
var overdueRequestsCount = GetRequestedTasksCount();
|
||||
var overdueRequestsCount = await GetRequestedTasksCount();
|
||||
|
||||
var ticketRequested = TasksHaveTicketRequestsCount(userId);
|
||||
var overdueTicket = TasksHaveTicketCounts(userId);
|
||||
var ticketRequested = await TasksHaveTicketRequestsCount(userId);
|
||||
var overdueTicket = await TasksHaveTicketCounts(userId);
|
||||
|
||||
return overdueTasksCount + overdueRequestsCount + ticketRequested + overdueTicket;
|
||||
}
|
||||
@@ -2036,7 +2351,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
return overdueRequestsCount;
|
||||
}
|
||||
|
||||
public int OverdueTasksCount(long userId)
|
||||
public async Task<int> OverdueTasksCount(long userId)
|
||||
{
|
||||
var account = _accountRepository.GetIncludePositions(userId);
|
||||
|
||||
@@ -2048,12 +2363,12 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
int overdueTasksCount;
|
||||
if (positionValue == 1)
|
||||
{
|
||||
overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId &&
|
||||
overdueTasksCount = await _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId &&
|
||||
x.AssignerId == userId && x.Task.Assigns.Count == 1 &&
|
||||
!x.IsCancel && !x.IsCanceledRequest &&
|
||||
!x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date &&
|
||||
x.Task.IsActiveString == "true" && x.Task.TicketId == null)
|
||||
.GroupBy(x => x.TaskId).Select(x => x.First()).Count();
|
||||
.GroupBy(x => x.TaskId).Select(x => x.First()).CountAsync();
|
||||
|
||||
//overdueTasksCount = _accountContext.Tasks.Include(x =>
|
||||
// x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) &&
|
||||
@@ -2065,43 +2380,49 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
}
|
||||
else
|
||||
{
|
||||
overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId &&
|
||||
overdueTasksCount = await _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId &&
|
||||
!x.IsCancel && !x.IsCanceledRequest &&
|
||||
!x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date &&
|
||||
x.Task.IsActiveString == "true" && x.Task.TicketId == null)
|
||||
.GroupBy(x => x.TaskId).Select(x => x.First()).Count();
|
||||
.GroupBy(x => x.TaskId).Select(x => x.First()).CountAsync();
|
||||
;
|
||||
}
|
||||
|
||||
return overdueTasksCount;
|
||||
}
|
||||
|
||||
public int TasksHaveTicketCounts(long userId)
|
||||
public List<Tasks> GetTasksByTaskScheduleId(long taskScheduleId)
|
||||
{
|
||||
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
return _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList();
|
||||
}
|
||||
|
||||
|
||||
public async Task<int> TasksHaveTicketCounts(long userId)
|
||||
{
|
||||
return await _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
|
||||
!x.IsCanceledRequest && !x.IsDoneRequest &&
|
||||
!x.TimeRequest && (x.AssignerId == userId || x.AssignedId == userId) &&
|
||||
(x.Task.TicketId != null && x.Task.TicketId > 0)).GroupBy(x => x.TaskId).Count();
|
||||
(x.Task.TicketId != null && x.Task.TicketId > 0)).GroupBy(x => x.TaskId).CountAsync();
|
||||
}
|
||||
|
||||
public int TasksHaveTicketRequestsCount(long userId)
|
||||
public async Task<int> TasksHaveTicketRequestsCount(long userId)
|
||||
{
|
||||
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||
if (positionValue == 1)
|
||||
{
|
||||
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
return await _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
|
||||
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId)
|
||||
.Select(x => x.First()).Count();
|
||||
.Select(x => x.First()).CountAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
return await _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
||||
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
|
||||
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId)
|
||||
.Select(x => x.First()).Count();
|
||||
.Select(x => x.First()).CountAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2340,7 +2661,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
@@ -2404,6 +2725,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
{
|
||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
||||
var today = DateTime.Today;
|
||||
var emptyAcc = new AccountViewModel()
|
||||
{
|
||||
Fullname = "-",
|
||||
@@ -2413,7 +2735,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
|
||||
.ThenInclude(x => x.Media)
|
||||
.Where(x =>
|
||||
x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null);
|
||||
x.Task.IsActiveString == "true" && x.AssignedId == accountId && x.Task.TicketId == null &&!x.IsDoneRequest && !x.IsCanceledRequest);
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||
{
|
||||
raw = raw.Where(x =>
|
||||
@@ -2446,6 +2768,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
|
||||
Description = x.Task.Description,
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
|
||||
});
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||
{
|
||||
@@ -2484,7 +2807,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
MediaCount = x.MediaCount,
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
HasRequest = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest
|
||||
});
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
||||
{
|
||||
@@ -2553,8 +2877,10 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
}
|
||||
|
||||
|
||||
var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0)
|
||||
.ThenBy(x => x.EndTaskDateGE);
|
||||
var orderResult = result.OrderBy(x => x.IsDone || x.IsCancel)
|
||||
.ThenByDescending(x => x.EndTaskDateGE <= today.AddDays(1) && !x.RequestTime)
|
||||
.ThenByDescending(x => x.RequestTime)
|
||||
.ThenBy(x => x.EndTaskDateGE); // مرتبسازی داخلی بر اساس تاریخ
|
||||
|
||||
|
||||
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
|
||||
@@ -2588,7 +2914,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
MediaCount = x.MediaCount,
|
||||
SelfName = x.SelfName,
|
||||
Description = x.Description,
|
||||
IsDoneRequest = x.IsDoneRequest
|
||||
IsDoneRequest = x.IsDoneRequest,
|
||||
|
||||
}).ToList();
|
||||
|
||||
@@ -2616,7 +2942,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||
IsCancelRequest = x.IsCancelRequest,
|
||||
ContractingPartyName = x.ContractingPartyName,
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
|
||||
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel,x.RequestTime),
|
||||
MediaCount = x.MediaCount,
|
||||
HasAttachment = x.MediaCount > 0,
|
||||
SelfName = x.SelfName,
|
||||
@@ -2675,6 +3001,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
||||
AssignedName = "-",
|
||||
AssignedPositionValue = 0
|
||||
},
|
||||
HasRequest = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest
|
||||
|
||||
}).ToList();
|
||||
return final;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.InfraStructure;
|
||||
using AccountManagement.Application.Contracts.Media;
|
||||
using AccountManagement.Application.Contracts.Task;
|
||||
using AccountManagement.Application.Contracts.TaskSchedule;
|
||||
using AccountManagement.Domain.TaskScheduleAgg;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
||||
|
||||
public class TaskScheduleRepository : RepositoryBase<long, TaskSchedule>, ITaskScheduleRepository
|
||||
{
|
||||
private readonly AccountContext _accountContext;
|
||||
|
||||
public TaskScheduleRepository(AccountContext accountContext) : base(accountContext)
|
||||
{
|
||||
_accountContext = accountContext;
|
||||
}
|
||||
|
||||
public async Task<TaskScheduleDetailsViewModel> GetDetails(long id)
|
||||
{
|
||||
var taskSchedule = await _accountContext.TaskSchedules.Include(x => x.TasksList).ThenInclude(x => x.Assigns)
|
||||
.Include(x => x.TasksList).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media).FirstOrDefaultAsync(x => x.id == id);
|
||||
if (taskSchedule == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var firstTaskDetails = taskSchedule.TasksList.First();
|
||||
|
||||
var firstTimeAssigns = firstTaskDetails.Assigns.Where(x => x.FirstTimeCreation).ToList();
|
||||
|
||||
var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList();
|
||||
|
||||
var senderId = firstTaskDetails.SenderId;
|
||||
|
||||
|
||||
var assignedAccounts = await _accountContext.Accounts.Where(x => assignedIds.Contains(x.id)).ToListAsync();
|
||||
|
||||
var sender =
|
||||
await _accountContext.Accounts.FirstOrDefaultAsync(x => senderId == x.id);
|
||||
|
||||
var viewModel = new TaskScheduleDetailsViewModel()
|
||||
{
|
||||
Title = firstTaskDetails.Title,
|
||||
Description = firstTaskDetails.Description,
|
||||
ContractingPartyName = firstTaskDetails.ContractingPartyName,
|
||||
AssignedName = assignedAccounts.Select(x => x.Fullname).ToList(),
|
||||
CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(),
|
||||
SenderName = sender.Fullname,
|
||||
TaskScheduleType = taskSchedule.Type,
|
||||
TaskScheduleUnitType = taskSchedule.UnitType,
|
||||
UnitNumber = taskSchedule.UnitNumber,
|
||||
Count = taskSchedule.Type == TaskScheduleType.Limited ? taskSchedule.Count : "نامحدود",
|
||||
FirstEndTaskDate = firstTaskDetails.Assigns.FirstOrDefault()?.EndTaskDate.ToFarsi() ?? "",
|
||||
Medias = firstTaskDetails.TaskMedias.Select(x => new MediaViewModel()
|
||||
{
|
||||
Category = x.Media.Category,
|
||||
Id = x.MediaId,
|
||||
Type = x.Media.Type,
|
||||
Path = x.Media.Path,
|
||||
}).ToList(),
|
||||
};
|
||||
return viewModel;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
|
||||
using Microsoft.AspNetCore.JsonPatch.Operations;
|
||||
|
||||
namespace Company.Domain.AdminMonthlyOverviewAgg;
|
||||
|
||||
public class AdminMonthlyOverview:EntityBase
|
||||
{
|
||||
public AdminMonthlyOverview(long workshopId, int month, int year, AdminMonthlyOverviewStatus status)
|
||||
{
|
||||
WorkshopId = workshopId;
|
||||
Month = month;
|
||||
Year = year;
|
||||
Status = status;
|
||||
}
|
||||
|
||||
public long WorkshopId { get; set; }
|
||||
public int Month { get; set; }
|
||||
public int Year { get; set; }
|
||||
public AdminMonthlyOverviewStatus Status { get; set; }
|
||||
|
||||
public void Next()
|
||||
{
|
||||
var maxValue = Enum.GetValues(typeof(AdminMonthlyOverviewStatus))
|
||||
.Cast<AdminMonthlyOverviewStatus>()
|
||||
.Max();
|
||||
|
||||
if (Status >= maxValue)
|
||||
{
|
||||
throw new InvalidDataException("تغییر وضعیت وارد شده نامعتبر است");
|
||||
}
|
||||
Status += 1;
|
||||
}
|
||||
|
||||
public void Back()
|
||||
{
|
||||
var minValue = Enum.GetValues(typeof(AdminMonthlyOverviewStatus))
|
||||
.Cast<AdminMonthlyOverviewStatus>()
|
||||
.Min();
|
||||
|
||||
if (Status <= minValue)
|
||||
{
|
||||
throw new InvalidDataException("تغییر وضعیت وارد شده نامعتبر است");
|
||||
}
|
||||
Status -= 1;
|
||||
}
|
||||
|
||||
public void SetStatus(AdminMonthlyOverviewStatus status)
|
||||
{
|
||||
Status = status;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
|
||||
|
||||
namespace Company.Domain.AdminMonthlyOverviewAgg;
|
||||
|
||||
public interface IAdminMonthlyOverviewRepository:IRepository<long, AdminMonthlyOverview>
|
||||
{
|
||||
Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel);
|
||||
Task<AdminMonthlyOverViewCounterVm> GetCounter(int year, int month, long accountId);
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.CheckoutAgg.ValueObjects;
|
||||
using Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
|
||||
namespace Company.Domain.CheckoutAgg;
|
||||
@@ -21,7 +25,11 @@ public class Checkout : EntityBase
|
||||
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
|
||||
, string archiveCode, string personnelCode,
|
||||
string totalClaims, string totalDeductions, double totalPayment, string signature, double marriedAllowance, bool leaveCheckout,
|
||||
double creditLeaves, double absencePeriod, double averageHoursPerDay, bool hasRollCall, string overTimeWorkvalue, string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue, string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute)
|
||||
double creditLeaves, double absencePeriod, double averageHoursPerDay, bool hasRollCall, string overTimeWorkvalue,
|
||||
string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue,
|
||||
string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute,
|
||||
ICollection<CheckoutLoanInstallment> loanInstallments,
|
||||
ICollection<CheckoutSalaryAid> salaryAids)
|
||||
{
|
||||
EmployeeFullName = employeeFullName;
|
||||
FathersName = fathersName;
|
||||
@@ -78,6 +86,8 @@ public class Checkout : EntityBase
|
||||
TotalDayOfLeaveCompute = totalDayOfLeaveCompute;
|
||||
TotalDayOfYearsCompute = totalDayOfYearsCompute;
|
||||
TotalDayOfBunosesCompute = totalDayOfBunosesCompute;
|
||||
LoanInstallments = loanInstallments;
|
||||
SalaryAids = salaryAids;
|
||||
}
|
||||
|
||||
public string EmployeeFullName { get; private set; }
|
||||
@@ -181,7 +191,15 @@ public class Checkout : EntityBase
|
||||
/// </summary>
|
||||
public string TotalDayOfBunosesCompute { get; private set; }
|
||||
|
||||
public Workshop Workshop { get; set; }
|
||||
|
||||
#region valueObjects
|
||||
|
||||
public ICollection<CheckoutLoanInstallment> LoanInstallments { get; set; } = [];
|
||||
public ICollection<CheckoutSalaryAid> SalaryAids { get; set; } = [];
|
||||
#endregion
|
||||
|
||||
|
||||
public Workshop Workshop { get; set; }
|
||||
//public WorkingHours WorkingHours { get; set; }
|
||||
|
||||
public void Edit(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth,
|
||||
@@ -278,4 +296,16 @@ public class Checkout : EntityBase
|
||||
this.TotalDeductions = totalDeductions;
|
||||
this.TotalPayment = totalPayment;
|
||||
}
|
||||
|
||||
|
||||
public void SetSalaryAid(ICollection<CheckoutSalaryAid> salaryAids,double salaryAidAmount)
|
||||
{
|
||||
SalaryAids = salaryAids;
|
||||
SalaryAidDeduction = salaryAidAmount;
|
||||
}
|
||||
public void SetLoanInstallment(ICollection<CheckoutLoanInstallment> lonaInstallments, double installmentsAmount)
|
||||
{
|
||||
LoanInstallments = lonaInstallments;
|
||||
InstallmentDeduction = installmentsAmount;
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,36 @@ 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);
|
||||
Task CreateCkeckout(Checkout command);
|
||||
/// <summary>
|
||||
/// لود لیست اولیه جهت ایجاد فیش حقوقی
|
||||
/// </summary>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="year"></param>
|
||||
/// <param name="month"></param>
|
||||
/// <param name="contractStart"></param>
|
||||
/// <param name="contractEnd"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year,
|
||||
string month,
|
||||
string contractStart, string contractEnd);
|
||||
//void CreateCkeckout(Checkout command);
|
||||
|
||||
|
||||
|
||||
Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel);
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace Company.Domain.CheckoutAgg.ValueObjects;
|
||||
|
||||
public class CheckoutLoanInstallment
|
||||
{
|
||||
public CheckoutLoanInstallment(string amountForMonth, string month, string year, IsActive isActive, string loanRemaining, string loanAmount, long entityId)
|
||||
{
|
||||
AmountForMonth = amountForMonth;
|
||||
Month = month;
|
||||
Year = year;
|
||||
IsActive = isActive;
|
||||
LoanRemaining = loanRemaining;
|
||||
LoanAmount = loanAmount;
|
||||
EntityId = entityId;
|
||||
}
|
||||
|
||||
public string AmountForMonth { get; private set; }
|
||||
public string Month { get; private set; }
|
||||
public string Year { get; private set; }
|
||||
public string LoanRemaining { get; set; }
|
||||
public IsActive IsActive { get; private set; }
|
||||
public string LoanAmount { get; set; }
|
||||
public long EntityId { get; set; }
|
||||
}
|
||||
24
Company.Domain/CheckoutAgg/ValueObjects/CheckoutSalaryAid.cs
Normal file
24
Company.Domain/CheckoutAgg/ValueObjects/CheckoutSalaryAid.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using AccountManagement.Domain.AccountAgg;
|
||||
|
||||
namespace Company.Domain.CheckoutAgg.ValueObjects;
|
||||
|
||||
public class CheckoutSalaryAid
|
||||
{
|
||||
public CheckoutSalaryAid(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; }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
@@ -14,4 +14,8 @@
|
||||
<ProjectReference Include="..\CompanyManagment.App.Contracts\CompanyManagment.App.Contracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="CheckoutAgg\ValueObjects\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.empolyerAgg;
|
||||
using Company.Domain.RepresentativeAgg;
|
||||
@@ -42,8 +43,44 @@ public class PersonalContractingParty : EntityBase
|
||||
|
||||
public string IsActiveString { get; private set; }
|
||||
public string IsBlock { get; private set; }
|
||||
|
||||
public int BlockTimes {get; private set; }
|
||||
|
||||
#region NewProps
|
||||
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام پدر
|
||||
/// </summary>
|
||||
public string FatherName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ تولد
|
||||
/// </summary>
|
||||
public DateTime? DateOfBirth { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا از طریق ای پی ای احراز هویت شده است
|
||||
/// </summary>
|
||||
public bool IsAuthenticated { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// جنسیت
|
||||
/// </summary>
|
||||
public Gender Gender { get; private set; }
|
||||
#endregion
|
||||
|
||||
|
||||
public List<Employer> Employers { get; private set; }
|
||||
public Representative Representative { get; set; }
|
||||
|
||||
@@ -159,5 +196,21 @@ public class PersonalContractingParty : EntityBase
|
||||
this.IsActiveString = "false";
|
||||
}
|
||||
|
||||
|
||||
public void Authenticated()
|
||||
{
|
||||
IsAuthenticated = true;
|
||||
}
|
||||
|
||||
public void Authentication(string fName, string lName, string fatherName,string idNumber, string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender)
|
||||
{
|
||||
this.FName = fName;
|
||||
this.LName = lName;
|
||||
this.FatherName = fatherName;
|
||||
this.IdNumberSeri = idNumberSeri;
|
||||
this.IdNumberSerial = idNumberSerial;
|
||||
this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : null;
|
||||
this.IdNumber = idNumber;
|
||||
this.Gender = gender;
|
||||
this.IsAuthenticated = true;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
using _0_Framework.Application;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
||||
using Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
|
||||
|
||||
namespace Company.Domain.CustomizeCheckoutAgg;
|
||||
@@ -15,8 +17,7 @@ namespace Company.Domain.CustomizeCheckoutAgg;
|
||||
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,
|
||||
@@ -30,7 +31,9 @@ public class CustomizeCheckout : EntityBase
|
||||
double totalPayment, string contractNo, ICollection<CustomizeCheckoutFine> checkoutFines,
|
||||
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
|
||||
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
|
||||
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards, TimeSpan lateToWorkValue)
|
||||
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));
|
||||
MonthInt = Convert.ToInt32(contractStart.ToFarsi().Substring(5, 2));
|
||||
@@ -74,6 +77,12 @@ public class CustomizeCheckout : EntityBase
|
||||
WorkshopFullName = workshopFullName;
|
||||
|
||||
LateToWorkValue = lateToWorkValue;
|
||||
SettingSalary = settingSalary;
|
||||
DailyWage = dailyWage;
|
||||
ShiftStatus = shiftStatus;
|
||||
IrregularShift = irregularShift;
|
||||
CustomizeRotatingShifts = customizeRotatingShifts;
|
||||
RegularShifts = employeeSettingsShifts;
|
||||
}
|
||||
|
||||
|
||||
@@ -249,6 +258,18 @@ public class CustomizeCheckout : EntityBase
|
||||
/// </summary>
|
||||
public double TotalPayment { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// مزد روزانه
|
||||
/// </summary>
|
||||
public double DailyWage { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// حقوق تعیین شده
|
||||
/// </summary>
|
||||
public double SettingSalary { get; private set; }
|
||||
|
||||
public WorkshopShiftStatus ShiftStatus { get; set; }
|
||||
|
||||
|
||||
#region Values
|
||||
|
||||
@@ -266,6 +287,12 @@ public class CustomizeCheckout : EntityBase
|
||||
public ICollection<CustomizeCheckoutSalaryAid> CustomizeCheckoutSalaryAids { get; set; }
|
||||
public ICollection<CustomizeCheckoutReward> CustomizeCheckoutRewards { get; set; }
|
||||
|
||||
public IrregularShift IrregularShift { get; set; }
|
||||
public ICollection<CustomizeRotatingShift> CustomizeRotatingShifts { get; set; }
|
||||
public ICollection<CustomizeCheckoutRegularShift> RegularShifts { get; set; }
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Relations
|
||||
@@ -275,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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.CustomizeCheckoutAgg
|
||||
{
|
||||
@@ -14,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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,12 +13,16 @@ public class CustomizeCheckoutLoanInstallments
|
||||
IsActive = isActive;
|
||||
LoanRemaining = loanRemaining;
|
||||
LoanAmount = loanAmount;
|
||||
EntityId = entityId;
|
||||
}
|
||||
|
||||
public string AmountForMonth { get; private set; }
|
||||
public string Month { get; private set; }
|
||||
public string Year { get; private set; }
|
||||
public string LoanRemaining { get; set; }
|
||||
public string LoanAmount { get; set; }
|
||||
public IsActive IsActive { get; private set; }
|
||||
public string LoanAmount { get; set; }
|
||||
public long EntityId { get; set; }
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
|
||||
namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
||||
|
||||
public class CustomizeCheckoutRegularShift:CustomizeSifts
|
||||
{
|
||||
public CustomizeCheckoutRegularShift(TimeOnly startTime, TimeOnly endTime, ShiftPlacement placement) : base(startTime, endTime, placement)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -6,6 +6,9 @@ using Company.Domain.WorkshopAgg;
|
||||
using System;
|
||||
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;
|
||||
@@ -18,15 +21,23 @@ public class CustomizeCheckoutTemp : EntityBase
|
||||
{
|
||||
LateToWorkValue = lateToWorkValue;
|
||||
}
|
||||
public CustomizeCheckoutTemp(DateTime contractStart, DateTime contractEnd, long employeeId, string employeeFName, string employeeLName, DateTime employeeDateOfBirth,
|
||||
public CustomizeCheckoutTemp(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<CustomizeCheckoutTempFine> checkoutFines, ICollection<CustomizeCheckoutTempLoanInstallments> customizeCheckoutLoanInstallments,
|
||||
ICollection<CustomizeCheckoutTempSalaryAid> customizeCheckoutSalaryAids, ICollection<CustomizeCheckoutTempReward> customizeCheckoutRewards,
|
||||
TimeSpan lateToWorkValue)
|
||||
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<CustomizeCheckoutTempFine> checkoutFines,
|
||||
ICollection<CustomizeCheckoutTempLoanInstallments> customizeCheckoutLoanInstallments,
|
||||
ICollection<CustomizeCheckoutTempSalaryAid> customizeCheckoutSalaryAids,
|
||||
ICollection<CustomizeCheckoutTempReward> 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));
|
||||
MonthInt = Convert.ToInt32(contractStart.ToFarsi().Substring(5, 2));
|
||||
@@ -70,7 +81,13 @@ public class CustomizeCheckoutTemp : EntityBase
|
||||
WorkshopFullName = workshopFullName;
|
||||
|
||||
LateToWorkValue = lateToWorkValue;
|
||||
}
|
||||
SettingSalary = settingSalary;
|
||||
DailyWage = dailyWage;
|
||||
ShiftStatus = shiftStatus;
|
||||
IrregularShift = irregularShift;
|
||||
CustomizeRotatingShifts = customizeRotatingShifts;
|
||||
RegularShifts = employeeSettingsShifts;
|
||||
}
|
||||
|
||||
#region Getters
|
||||
/// <summary>
|
||||
@@ -103,6 +120,10 @@ public class CustomizeCheckoutTemp : EntityBase
|
||||
public ICollection<CustomizeCheckoutTempSalaryAid> CustomizeCheckoutSalaryAids { get; set; }
|
||||
public ICollection<CustomizeCheckoutTempReward> CustomizeCheckoutRewards { get; set; }
|
||||
|
||||
public IrregularShift IrregularShift { get; set; }
|
||||
public ICollection<CustomizeRotatingShift> CustomizeRotatingShifts { get; set; }
|
||||
public ICollection<CustomizeCheckoutRegularShift> RegularShifts { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -254,10 +275,22 @@ public class CustomizeCheckoutTemp : EntityBase
|
||||
/// </summary>
|
||||
public double TotalPayment { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// مزد روزانه
|
||||
/// </summary>
|
||||
public double DailyWage { get; private set; }
|
||||
|
||||
#region Values
|
||||
/// <summary>
|
||||
/// حقوق تعیین شده
|
||||
/// </summary>
|
||||
public double SettingSalary { get; private set; }
|
||||
public WorkshopShiftStatus ShiftStatus { get; set; }
|
||||
|
||||
public TimeSpan LateToWorkValue { get; private set; }
|
||||
|
||||
|
||||
#region Values
|
||||
|
||||
public TimeSpan LateToWorkValue { get; private set; }
|
||||
|
||||
|
||||
#endregion
|
||||
@@ -271,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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -213,6 +213,60 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
|
||||
earlyExit.EarlyExitTimeFines.Select(x => new EarlyExitTimeFine(x.Minute, x.FineMoney))
|
||||
.ToList(), earlyExit.Value);
|
||||
}
|
||||
public void UpdateIsShiftChange()
|
||||
{
|
||||
var groupSetting = CustomizeWorkshopGroupSettings;
|
||||
if (groupSetting == null)
|
||||
return;
|
||||
bool isShiftChange;
|
||||
|
||||
|
||||
if (WorkshopShiftStatus == WorkshopShiftStatus.Regular)
|
||||
{
|
||||
|
||||
|
||||
|
||||
if (CustomizeWorkshopEmployeeSettingsShifts.All(x => groupSetting.CustomizeWorkshopGroupSettingsShifts.Any(y => x.Equals(y)))
|
||||
&& WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && FridayWork == groupSetting.FridayWork &&
|
||||
HolidayWork == groupSetting.HolidayWork && BreakTime == groupSetting.BreakTime)
|
||||
{
|
||||
isShiftChange = false;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
isShiftChange = true;
|
||||
}
|
||||
}
|
||||
else if (WorkshopShiftStatus == WorkshopShiftStatus.Irregular)
|
||||
{
|
||||
if (WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && BreakTime == groupSetting.BreakTime &&
|
||||
IrregularShift == groupSetting.IrregularShift && FridayWork == groupSetting.FridayWork &&
|
||||
HolidayWork == groupSetting.HolidayWork)
|
||||
{
|
||||
isShiftChange = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
isShiftChange = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CustomizeRotatingShifts.All(x => groupSetting.CustomizeRotatingShifts.Any(y => x.Equals(y)))
|
||||
&& WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && FridayWork == groupSetting.FridayWork &&
|
||||
HolidayWork == groupSetting.HolidayWork && BreakTime == groupSetting.BreakTime)
|
||||
{
|
||||
isShiftChange = false;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
isShiftChange = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
IsShiftChanged = isShiftChange;
|
||||
}
|
||||
}
|
||||
@@ -13,5 +13,7 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository<long
|
||||
List<CustomizeWorkshopEmployeeSettings> GetBy(long groupId);
|
||||
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingsByWorkshopId(long workshopId);
|
||||
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
|
||||
void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId);
|
||||
|
||||
bool CheckEmployeeShiftHasChanged(EditCustomizeEmployeeSettings command);
|
||||
}
|
||||
@@ -219,7 +219,7 @@ public class CustomizeWorkshopGroupSettings : BaseCustomizeEntity
|
||||
|
||||
}
|
||||
|
||||
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.id));
|
||||
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.EmployeeId));
|
||||
|
||||
foreach (var item in permittedToOverWrite)
|
||||
{
|
||||
|
||||
@@ -20,12 +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 phone, string address, string state, string city,
|
||||
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)
|
||||
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 )
|
||||
{
|
||||
FName = fName;
|
||||
LName = lName;
|
||||
@@ -135,7 +137,25 @@ public class Employee : EntityBase
|
||||
#region Pooya
|
||||
public List<EmployeeDocuments> EmployeeDocuments { get; set; }
|
||||
public EmployeeDocumentsAdminSelection EmployeeDocumentsAdminSelection { get; set; }
|
||||
public List<EmployeeBankInformation> EmployeeBankInformationList { get; set; }
|
||||
public List<EmployeeBankInformation> EmployeeBankInformationList { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Mahan
|
||||
|
||||
/// <summary>
|
||||
/// آیا پرسنل احراز هویت شده است
|
||||
/// </summary>
|
||||
public bool IsAuthorized { get; set; }
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
//public List<Checkout> Checkouts { get; set; }
|
||||
@@ -211,4 +231,51 @@ public class Employee : EntityBase
|
||||
this.IsActive = false;
|
||||
this.IsActiveString = "false";
|
||||
}
|
||||
|
||||
#region Mahan
|
||||
public void EditFromEmployeeClientTemp(string maritalStatus)
|
||||
{
|
||||
MaritalStatus = maritalStatus;
|
||||
}
|
||||
|
||||
public void Authorized()
|
||||
{
|
||||
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
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.EmployeeInsuranceRecordAgg;
|
||||
using CompanyManagment.App.Contracts.Employee;
|
||||
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
|
||||
|
||||
namespace Company.Domain.EmployeeAgg;
|
||||
@@ -47,6 +48,15 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
||||
Employee GetByNationalCode(string nationalCode);
|
||||
List<EmployeeViewModel> GetBy(List<long> employeeIds);
|
||||
|
||||
Employee GetByNationalCodeIgnoreQueryFilter(string nationalCode);
|
||||
Task<ICollection<ClientStartedWorkEmployeesDto>> GetClientEmployeesStartWork(long workshopId);
|
||||
Task<ICollection<ClientLeftWorkWorkEmployeesDto>> GetEmployeesForLeftWorkTemp(long workshopId);
|
||||
|
||||
Employee GetIgnoreQueryFilter(long id);
|
||||
|
||||
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Pooya
|
||||
@@ -54,7 +64,14 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
||||
List<EmployeeViewModel> GetWorkingEmployeesByWorkshopIdsAndNationalCodeAndDate(List<long> workshopIds, string nationalCode, DateTime date);
|
||||
List<EmployeeViewModel> GetWorkingEmployeesByWorkshopId(long workshopId);
|
||||
|
||||
List<EmployeeViewModel> GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(List<long> workshopIds,
|
||||
string nationalCode, DateTime date);
|
||||
|
||||
List<(long Id, string Name)> SimpleGetRangeByIds(IEnumerable<long> newEmployeeIds);
|
||||
Task<GetEditEmployeeInEmployeeDocumentViewModel> GetEmployeeEditInEmployeeDocumentWorkFlow(long employeeId,
|
||||
long workshopId);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
31
Company.Domain/EmployeeClientTempAgg/EmployeeClientTemp.cs
Normal file
31
Company.Domain/EmployeeClientTempAgg/EmployeeClientTemp.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
|
||||
namespace Company.Domain.EmployeeClientTempAgg;
|
||||
|
||||
public class EmployeeClientTemp : EntityBase
|
||||
{
|
||||
public EmployeeClientTemp(long workshopId, DateTime startWorkDate, long employeeId, string maritalStatus,
|
||||
string employeeFullName)
|
||||
{
|
||||
StartWorkDate = startWorkDate;
|
||||
WorkshopId = workshopId;
|
||||
EmployeeId = employeeId;
|
||||
MaritalStatus = maritalStatus;
|
||||
EmployeeFullName = employeeFullName;
|
||||
}
|
||||
|
||||
public string EmployeeFullName { get; private set; }
|
||||
public long WorkshopId { get; private set; }
|
||||
public long EmployeeId { get; private set; }
|
||||
public DateTime StartWorkDate { get; private set; }
|
||||
|
||||
public string MaritalStatus { get; private set; }
|
||||
|
||||
public void Edit(string maritalStatus)
|
||||
{
|
||||
|
||||
MaritalStatus = maritalStatus;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.EmployeeClientTemp;
|
||||
|
||||
namespace Company.Domain.EmployeeClientTempAgg;
|
||||
|
||||
public interface IEmployeeClientTempRepository : IRepository<long, EmployeeClientTemp>
|
||||
{
|
||||
EmployeeClientTemp GetByEmployeeIdAndWorkshopId(long employeeId, long commandWorkshopId);
|
||||
EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
|
||||
void Remove(EmployeeClientTemp entity);
|
||||
Task<List<EmployeeClientTempViewModel>> GetByEmployeeId(long employeeId);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.EmployeeComputeOptions;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
|
||||
namespace Company.Domain.EmployeeComputeOptionsAgg
|
||||
{
|
||||
@@ -14,5 +15,7 @@ namespace Company.Domain.EmployeeComputeOptionsAgg
|
||||
EmployeeComputeOptionsViewModel GetEmployeeOptions(long workshopId, long employeeId);
|
||||
|
||||
List<EmployeeComputeOptionsViewModel> GetAllByWorkshopId(long workshopId);
|
||||
|
||||
List<WorkshopViewModel> TestBonusesBugWorkshops();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -54,11 +54,12 @@ namespace Company.Domain.EmployeeDocumentsAgg
|
||||
|
||||
var currentItems = EmployeeDocumentItemCollection.Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted)
|
||||
.GroupBy(x => x.DocumentLabel).Select(x => x.OrderByDescending(y => y.CreationDate).First());
|
||||
var currentItemsFiltered = currentItems.Where(x => x.DocumentStatus == DocumentStatus.Confirmed || x.DocumentStatus == DocumentStatus.SubmittedByAdmin)
|
||||
.Select(x => new{x.DocumentStatus,x.DocumentLabel}).ToList();
|
||||
var currentItemsFiltered = currentItems.Where(x => x.DocumentStatus is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient)
|
||||
.Select(x => new { x.DocumentStatus, x.DocumentLabel }).ToList();
|
||||
|
||||
|
||||
// ReSharper disable once SimplifyLinqExpressionUseAll
|
||||
if (!currentItemsFiltered.Any(x => x.DocumentStatus == DocumentStatus.SubmittedByAdmin))
|
||||
if (!currentItemsFiltered.Any(x => x.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient))
|
||||
IsSentToChecker = false;
|
||||
|
||||
else
|
||||
|
||||
@@ -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);
|
||||
@@ -26,9 +26,80 @@ namespace Company.Domain.EmployeeDocumentsAgg
|
||||
|
||||
List<WorkshopWithEmployeeDocumentsViewModel> GetWorkshopsWithDocumentsAwaitingReviewForAdminWorkFlow(List<long> workshops);
|
||||
List<EmployeeDocumentsViewModel> GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId);
|
||||
int GetCheckerWorkFlowCount();
|
||||
//int GetAdminWorkFlowCountForNewEmployees(List<long> workshopIds);
|
||||
int GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List<long> workshopIds);
|
||||
Task<int> GetCheckerWorkFlowCount();
|
||||
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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework_b.Domain;
|
||||
using CompanyManagment.App.Contracts.Employee;
|
||||
using CompanyManagment.App.Contracts.Employer;
|
||||
@@ -16,4 +17,17 @@ public interface IFileRepository : IRepository<long, File1>
|
||||
string GetEmployerFullNameById(long id);
|
||||
List<EmployeeViewModel> GetAllEmploees();
|
||||
List<EmployerViewModel> GetAllEmployers();
|
||||
|
||||
#region Mahan
|
||||
|
||||
|
||||
Task<List<FileExcelViewModel>> GetExcelDetails();
|
||||
Task<List<FileListViewModel>> GetList(GetFileSearchModel searchModel);
|
||||
#endregion
|
||||
|
||||
Task<List<string>> GetAllArchiveNo();
|
||||
Task<List<string>> GetAllClassFiles();
|
||||
Task<List<EmployeeSelectListViewModel>> GetClientAndLitigation();
|
||||
Task<EditEmployee> GetClientDetails(long fileId);
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework_b.Domain;
|
||||
using CompanyManagment.App.Contracts.FileAlert;
|
||||
|
||||
@@ -10,4 +11,5 @@ public interface IFileAlertRepository : IRepository<long, FileAlert>
|
||||
FileAlertViewModel GetDetails(long id);
|
||||
void Remove(long id);
|
||||
List<EditFileAlert> Search(FileAlertSearchModel searchModel);
|
||||
Task<List<FileAlertViewModel>> GetFileAlerts(FileAlertSearchModel searchModel);
|
||||
}
|
||||
@@ -6,7 +6,11 @@ namespace Company.Domain.FineAgg;
|
||||
|
||||
public class Fine:EntityBase
|
||||
{
|
||||
public Fine(long employeeId, long workshopId, string title, double amount,DateTime fineDate)
|
||||
private Fine()
|
||||
{
|
||||
|
||||
}
|
||||
public Fine(long employeeId, long workshopId, string title, double amount,DateTime fineDate, long createdByAccountId, UserType createdByUserType)
|
||||
{
|
||||
EmployeeId = employeeId;
|
||||
WorkshopId = workshopId;
|
||||
@@ -15,6 +19,9 @@ public class Fine:EntityBase
|
||||
IsActive = IsActive.True;
|
||||
FineDate = fineDate;
|
||||
|
||||
CreatedByUserType = createdByUserType;
|
||||
CreatedByAccountId = createdByAccountId;
|
||||
|
||||
}
|
||||
|
||||
public long EmployeeId { get; private set; }
|
||||
@@ -24,7 +31,23 @@ public class Fine:EntityBase
|
||||
public IsActive IsActive { get; private set; }
|
||||
public DateTime FineDate { get; private set; }
|
||||
|
||||
public void DeActive()
|
||||
|
||||
/// <summary>
|
||||
/// شخصی که جریمه را ساخته است
|
||||
/// </summary>
|
||||
public long CreatedByAccountId { get; private set; }
|
||||
public UserType CreatedByUserType { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// شخصی که جریمه را ویرایش کرده است
|
||||
/// </summary>
|
||||
public long LastModifiedByAccountId { get; private set; }
|
||||
public UserType LastModifiedByUserType { get; private set; }
|
||||
|
||||
|
||||
|
||||
public void DeActive()
|
||||
{
|
||||
IsActive = IsActive.False;
|
||||
}
|
||||
@@ -34,14 +57,15 @@ public class Fine:EntityBase
|
||||
IsActive = IsActive.True;
|
||||
}
|
||||
|
||||
public void Edit(long employeeId, long workshopId, string title, double amount,DateTime fineDate)
|
||||
public void Edit(long employeeId, long workshopId, string title, double amount,DateTime fineDate, long modifiedByAccountId, UserType modifiedByUserType)
|
||||
{
|
||||
EmployeeId = employeeId;
|
||||
WorkshopId = workshopId;
|
||||
Title = title;
|
||||
Amount = amount;
|
||||
FineDate = fineDate;
|
||||
|
||||
LastModifiedByAccountId = modifiedByAccountId;
|
||||
LastModifiedByUserType = modifiedByUserType;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,4 +12,14 @@ public interface IFineRepository : IRepository<long, Fine>
|
||||
void Remove(Fine entity);
|
||||
void RemoveRange(IEnumerable<Fine> entityEnumerable);
|
||||
|
||||
|
||||
#region Pooya
|
||||
|
||||
/// <summary>
|
||||
/// گروهبندی بر اساس ماه هنگام جستجو با انتخاب کارمند
|
||||
/// </summary>
|
||||
FinesGroupedViewModel GetSearchListAsGrouped(FineSearchViewModel searchModel);
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user