Compare commits
335 Commits
Fix/LeftWo
...
83b045c2b1
| Author | SHA1 | Date | |
|---|---|---|---|
| 83b045c2b1 | |||
|
|
9ca041ac18 | ||
|
|
031fb05f8c | ||
|
|
4aed0ddd68 | ||
|
|
9b455d4a2e | ||
|
|
0c0e955800 | ||
|
|
c948498307 | ||
|
|
5f7f63689c | ||
|
|
7db754af56 | ||
|
|
87afbbe44c | ||
| f35aca8e44 | |||
| 16d45c6dc4 | |||
| 45e746b194 | |||
| e3b6d5f1c9 | |||
| 7c1fe65cf2 | |||
| f26fcba165 | |||
|
|
de2a6203df | ||
|
|
2208834a0e | ||
| de52a0be98 | |||
| 5fa49a4988 | |||
|
|
5bebec3fde | ||
|
|
cad808d73c | ||
| abef053f56 | |||
| 6469bf5a50 | |||
|
|
4fd5ef52ef | ||
|
|
61e2bdaaf5 | ||
| 8ab22d9948 | |||
|
|
17b5f5fee5 | ||
| 9e7e4ca655 | |||
|
|
100c9367ed | ||
| fdb6799c65 | |||
|
|
c81da3e787 | ||
|
|
d8c0471878 | ||
|
|
8418c2edc4 | ||
|
|
e109a41b90 | ||
|
|
158fc91a67 | ||
|
|
d1fb6e933d | ||
|
|
0811482370 | ||
| 24982e11d3 | |||
| 394d65db31 | |||
| 59deae29c2 | |||
|
|
5576ee5c24 | ||
|
|
46833f93da | ||
|
|
8d78ea548a | ||
|
|
ffbadc5a96 | ||
| e889b61d27 | |||
| b492aa39e8 | |||
| 2201ade168 | |||
|
|
baeeec183b | ||
|
|
3142a80b44 | ||
|
|
7c2354b386 | ||
|
|
175158a3d7 | ||
|
|
b79abcb175 | ||
|
|
7388fd8a81 | ||
|
|
42ea521e0b | ||
|
|
a9c489b43d | ||
|
|
66ada45d29 | ||
|
|
04e51fe3b5 | ||
|
|
e486f20a5a | ||
|
|
2db6a9695c | ||
|
|
cea68fce49 | ||
|
|
3f2c0c5531 | ||
|
|
22f13aea0b | ||
| 0ec62e5e83 | |||
|
|
86a3a21d5b | ||
|
|
e02bc9adc5 | ||
|
|
39bc95731e | ||
|
|
759792b44b | ||
|
|
1409d30dfd | ||
|
|
ad9f747027 | ||
|
|
b021636913 | ||
|
|
3007a87104 | ||
|
|
d7eb8517f7 | ||
|
|
eaaab56421 | ||
|
|
7d763715cd | ||
|
|
7d1eb780a5 | ||
|
|
c608e22062 | ||
|
|
3e1758d35c | ||
|
|
88a9a62dd3 | ||
|
|
7bcc052ec6 | ||
|
|
bb80da6e3b | ||
|
|
6fd9b336a9 | ||
|
|
44d5225ff3 | ||
|
|
03e4f7e8c1 | ||
|
|
2c6512faa2 | ||
|
|
406212a1f0 | ||
|
|
53e93bd410 | ||
|
|
19f109254d | ||
|
|
9311d68a91 | ||
|
|
9e91214941 | ||
|
|
aded6b2839 | ||
|
|
08d40ae299 | ||
|
|
659f647b31 | ||
|
|
0ddcb3653a | ||
|
|
3e3eccf0f0 | ||
|
|
22d7c49379 | ||
|
|
ca7e46907c | ||
|
|
ed7e6a3dee | ||
|
|
40482e167a | ||
|
|
3807b213bb | ||
| 2719639333 | |||
|
|
3aa6c6d1ed | ||
|
|
0112772d3f | ||
|
|
7eb8255215 | ||
|
|
3650caabfa | ||
|
|
4c734e0513 | ||
|
|
faac2bf707 | ||
|
|
f04749043e | ||
|
|
e8a9a674a1 | ||
|
|
d8b6b0f5e8 | ||
|
|
cc3812ebee | ||
|
|
3058f95e0e | ||
|
|
8fa8c33415 | ||
|
|
9393993755 | ||
|
|
4d81de755e | ||
|
|
f02aa4e217 | ||
|
|
6cce3f5321 | ||
|
|
59112d9635 | ||
|
|
987c1b51fa | ||
|
|
99e807fa23 | ||
|
|
5e186a2352 | ||
|
|
f68739cc22 | ||
|
|
17e390d840 | ||
|
|
f4a16b8c69 | ||
|
|
db8bb247b3 | ||
|
|
9cc3bb07f1 | ||
|
|
4fd71690d5 | ||
|
|
8078d8bfdd | ||
|
|
3b38b80a28 | ||
|
|
0cd8d5b4cf | ||
|
|
2ce17dcac9 | ||
|
|
233c1a3aa9 | ||
|
|
4b23448cc1 | ||
|
|
aeebb983a4 | ||
|
|
43c56aa4a1 | ||
|
|
349c374ca3 | ||
|
|
c81cafa228 | ||
|
|
c2fa992369 | ||
|
|
922ab6f32b | ||
|
|
0eee2a53c3 | ||
|
|
2fffa67ff6 | ||
|
|
c0e438aa6d | ||
|
|
acb6764271 | ||
|
|
37cd07c2b8 | ||
|
|
6201492879 | ||
|
|
c0f9fb6389 | ||
|
|
e17ca40df6 | ||
|
|
abc8f408a7 | ||
|
|
fc43e97cc4 | ||
|
|
eeea868c05 | ||
|
|
b8937ef79c | ||
|
|
789b0fbc24 | ||
|
|
65ce181001 | ||
|
|
140adb2588 | ||
|
|
afb07aa90f | ||
|
|
ee2adf1c13 | ||
|
|
986092135f | ||
|
|
b0f5ec6bbd | ||
|
|
9ef48b982d | ||
|
|
2a306dedac | ||
|
|
489528d076 | ||
|
|
ab2c1124ca | ||
|
|
bc36d8e151 | ||
|
|
f7f44b98fb | ||
|
|
400790a53b | ||
|
|
b8e831ce4d | ||
|
|
8aa8ffe8c8 | ||
|
|
5a8bccb98f | ||
|
|
3c73a277ce | ||
|
|
56def568b5 | ||
|
|
f4961a46eb | ||
|
|
6a2ff178d3 | ||
|
|
ffa728d05d | ||
|
|
5f64b945d1 | ||
|
|
75da32167e | ||
|
|
d99e69fa5b | ||
|
|
30c70c83b2 | ||
|
|
d90e01d733 | ||
|
|
ec0996f53c | ||
|
|
5f71cf829b | ||
|
|
da738054df | ||
|
|
521aa9b6ee | ||
|
|
bb2802002a | ||
|
|
2049d8b2eb | ||
|
|
2c6a39bf67 | ||
|
|
88a0552a07 | ||
|
|
280a475455 | ||
|
|
a7b91fac18 | ||
|
|
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 | ||
|
|
fcea7eed21 | ||
|
|
802f9a39c5 | ||
|
|
8cc26936cd | ||
|
|
b0293bf25c | ||
|
|
0a293dfa8c | ||
|
|
5825c7b8e2 | ||
|
|
5b97f79fbd | ||
|
|
a9c5c8f8ca | ||
|
|
9e60c12212 | ||
|
|
ff339b9eee | ||
| ebdf26d93c | |||
|
|
86c7113987 | ||
|
|
552ee74d56 | ||
|
|
d1e5adf96f | ||
|
|
fbf367677c | ||
|
|
67ec735778 | ||
|
|
612dd99bfe | ||
|
|
3a6f87eaca | ||
|
|
8e8e9ef5de | ||
|
|
1e18fe1067 | ||
|
|
d1aef862cf | ||
|
|
fb2f7ba7c1 | ||
|
|
fc18985334 | ||
|
|
92d36f2966 | ||
|
|
0c6a8821ac | ||
|
|
4b9d39f1e7 | ||
|
|
5daa36cfb5 | ||
|
|
9e5e7b57c7 | ||
|
|
a6984e5f1b | ||
|
|
fe8eb5d92b | ||
|
|
24e661252c | ||
|
|
e7d5716317 | ||
|
|
a6be044dbb | ||
|
|
c91f7e7a90 | ||
|
|
42de15b3db | ||
|
|
1ebbd2d7a9 | ||
|
|
ffcfb4ea3f | ||
|
|
a49e2dbb75 | ||
|
|
d8cd33732a | ||
|
|
a40a9643f4 | ||
|
|
55c139578d | ||
|
|
5aa714e81d | ||
|
|
62502fcede | ||
|
|
6eec454685 | ||
|
|
4022a1afd8 | ||
|
|
86cd776c4d | ||
|
|
13cad28356 | ||
|
|
9cdb922aa1 | ||
|
|
6699909b2f | ||
|
|
e9588125c0 | ||
|
|
ec277629fb | ||
|
|
718a7d42b7 | ||
|
|
9637b6a581 | ||
|
|
ec29d3b869 | ||
|
|
4648113a28 | ||
|
|
f4f6fd1bf6 | ||
|
|
d9b7245cee | ||
|
|
85bec9d7fb | ||
|
|
f93d0b7e89 | ||
|
|
f8f7e7d3cf | ||
|
|
e159738b3d | ||
|
|
ebde36ad8d | ||
|
|
6f160a85ab | ||
|
|
ebaef13c4d | ||
|
|
bf9c317565 | ||
|
|
a29e148753 | ||
|
|
625200bed1 | ||
|
|
22bd435627 | ||
|
|
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 | ||
|
|
423d6ada9b | ||
|
|
faeb297f5c | ||
|
|
64dffd6d25 | ||
|
|
ffdc71401e | ||
|
|
8bdfd44bba | ||
|
|
104534ed96 | ||
|
|
21f8a399b4 | ||
|
|
cad2c152e5 | ||
|
|
247e2f2069 | ||
|
|
cb845afdf6 | ||
|
|
530a263fd8 | ||
|
|
c00a9c0864 | ||
|
|
cdb29a80e1 | ||
|
|
aba8960b1d | ||
|
|
e2ba7d9450 | ||
|
|
a316b2a5f1 | ||
|
|
4b045440c4 | ||
|
|
af30c7f088 | ||
|
|
d95ca28cd4 | ||
|
|
c3457881b0 | ||
|
|
dbb0b2e53a | ||
|
|
7f900755be | ||
|
|
dc39f30c21 | ||
|
|
8dd9ee508a | ||
|
|
9f42af6a23 | ||
|
|
4449195aed |
@@ -12,65 +12,65 @@ namespace _0_Framework.Application;
|
|||||||
|
|
||||||
public class AuthHelper : IAuthHelper
|
public class AuthHelper : IAuthHelper
|
||||||
{
|
{
|
||||||
private readonly IHttpContextAccessor _contextAccessor;
|
private readonly IHttpContextAccessor _contextAccessor;
|
||||||
|
|
||||||
public AuthHelper(IHttpContextAccessor contextAccessor)
|
|
||||||
{
|
|
||||||
_contextAccessor = contextAccessor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AuthViewModel CurrentAccountInfo()
|
public AuthHelper(IHttpContextAccessor contextAccessor)
|
||||||
{
|
{
|
||||||
var result = new AuthViewModel();
|
_contextAccessor = contextAccessor;
|
||||||
if (!IsAuthenticated())
|
}
|
||||||
return result;
|
|
||||||
|
|
||||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
public AuthViewModel CurrentAccountInfo()
|
||||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
{
|
||||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
var result = new AuthViewModel();
|
||||||
result.ProfilePhoto = claims.FirstOrDefault(x => x.Type == "ProfilePhoto")?.Value;
|
if (!IsAuthenticated())
|
||||||
result.RoleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value);
|
return result;
|
||||||
result.Fullname = claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
|
|
||||||
result.Role = claims.FirstOrDefault(x => x.Type == "RoleName")?.Value;
|
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||||
result.ClientAriaPermission =claims.FirstOrDefault(x => x.Type == "ClientAriaPermission").Value;
|
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||||
result.AdminAreaPermission = claims.FirstOrDefault(x => x.Type == "AdminAreaPermission").Value;
|
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||||
result.PositionValue = !string.IsNullOrWhiteSpace(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) ? int.Parse(claims.FirstOrDefault(x => x.Type == "PositionValue")?.Value) : 0;
|
result.ProfilePhoto = claims.FirstOrDefault(x => x.Type == "ProfilePhoto")?.Value;
|
||||||
result.WorkshopList = Tools.DeserializeFromBsonList<WorkshopClaim>(claims.FirstOrDefault(x => x is { Type: "workshopList" })?.Value);
|
result.RoleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value);
|
||||||
result.WorkshopSlug = claims.FirstOrDefault(x => x is { Type: "WorkshopSlug" }).Value;
|
result.Fullname = claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
|
||||||
result.Mobile = claims.FirstOrDefault(x => x is { Type: "Mobile" }).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.SubAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId").Value);
|
||||||
result.WorkshopName = claims.FirstOrDefault(x => x is { Type: "WorkshopName" })?.Value;
|
result.WorkshopName = claims.FirstOrDefault(x => x is { Type: "WorkshopName" })?.Value;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<int> GetPermissions()
|
public List<int> GetPermissions()
|
||||||
{
|
{
|
||||||
if (!IsAuthenticated())
|
if (!IsAuthenticated())
|
||||||
return new List<int>();
|
return new List<int>();
|
||||||
|
|
||||||
var permissions = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "permissions")
|
var permissions = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "permissions")
|
||||||
?.Value;
|
?.Value;
|
||||||
return Tools.DeserializeFromBsonList<int>(permissions); //Mahan
|
return Tools.DeserializeFromBsonList<int>(permissions); //Mahan
|
||||||
}
|
}
|
||||||
|
|
||||||
public long CurrentAccountId()
|
public long CurrentAccountId()
|
||||||
{
|
{
|
||||||
return IsAuthenticated()
|
return IsAuthenticated()
|
||||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value)
|
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value)
|
||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
public long CurrentSubAccountId()
|
public long CurrentSubAccountId()
|
||||||
{
|
{
|
||||||
return IsAuthenticated()
|
return IsAuthenticated()
|
||||||
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "SubAccountId")?.Value)
|
? long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "SubAccountId")?.Value)
|
||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
public string CurrentAccountMobile()
|
public string CurrentAccountMobile()
|
||||||
{
|
{
|
||||||
return IsAuthenticated()
|
return IsAuthenticated()
|
||||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "Mobile")?.Value
|
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "Mobile")?.Value
|
||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Vafa
|
#region Vafa
|
||||||
|
|
||||||
@@ -111,157 +111,166 @@ public class AuthHelper : IAuthHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string GetWorkshopSlug()
|
public string GetWorkshopSlug()
|
||||||
{
|
{
|
||||||
return CurrentAccountInfo().ClientAriaPermission == "true"
|
return CurrentAccountInfo().ClientAriaPermission == "true"
|
||||||
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopSlug")?.Value
|
? _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopSlug")?.Value
|
||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
public string GetWorkshopName()
|
public string GetWorkshopName()
|
||||||
{
|
{
|
||||||
var workshopName = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ClientAriaPermission")?.Value == "true";
|
var workshopName = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ClientAriaPermission")?.Value == "true";
|
||||||
if (workshopName)
|
if (workshopName)
|
||||||
{
|
{
|
||||||
return _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopName")?.Value;
|
return _contextAccessor.HttpContext.User.Claims.First(x => x.Type == "WorkshopName")?.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
public string CurrentAccountRole()
|
public string CurrentAccountRole()
|
||||||
{
|
{
|
||||||
if (IsAuthenticated())
|
if (IsAuthenticated())
|
||||||
return _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value;
|
return _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAuthenticated()
|
public bool IsAuthenticated()
|
||||||
{
|
{
|
||||||
return _contextAccessor.HttpContext.User.Identity.IsAuthenticated;
|
return _contextAccessor.HttpContext.User.Identity.IsAuthenticated;
|
||||||
//var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
//var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||||
//if (claims.Count > 0)
|
//if (claims.Count > 0)
|
||||||
// return true;
|
// return true;
|
||||||
//return false;
|
//return false;
|
||||||
//return claims.Count > 0;
|
//return claims.Count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Signin(AuthViewModel account)
|
public void Signin(AuthViewModel account)
|
||||||
{
|
{
|
||||||
#region MahanChanges
|
#region MahanChanges
|
||||||
|
|
||||||
var permissions = account.Permissions is { Count: > 0 } ? Tools.SerializeToBson(account.Permissions) : "";
|
if (account.Id == 322)
|
||||||
var workshopBson = account.WorkshopList is { Count: > 0 } ? Tools.SerializeToBson(account.WorkshopList) : "";
|
account.Permissions.AddRange([3060301, 30603, 30604, 30605]);
|
||||||
var slug = account.WorkshopSlug ?? "";
|
|
||||||
|
|
||||||
#endregion
|
var permissions = account.Permissions is { Count: > 0 } ? Tools.SerializeToBson(account.Permissions) : "";
|
||||||
|
|
||||||
var claims = new List<Claim>
|
|
||||||
{
|
|
||||||
new Claim("AccountId", account.Id.ToString()),
|
var workshopBson = account.WorkshopList is { Count: > 0 } ? Tools.SerializeToBson(account.WorkshopList) : "";
|
||||||
new Claim(ClaimTypes.Name, account.Fullname),
|
var slug = account.WorkshopSlug ?? "";
|
||||||
new Claim(ClaimTypes.Role, account.RoleId.ToString()),
|
|
||||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
#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("permissions", permissions),
|
||||||
new Claim("Mobile", account.Mobile),
|
new Claim("Mobile", account.Mobile),
|
||||||
new Claim("ProfilePhoto", account.ProfilePhoto ),
|
new Claim("ProfilePhoto", account.ProfilePhoto ),
|
||||||
new Claim("RoleName", account.RoleName),
|
new Claim("RoleName", account.RoleName),
|
||||||
new Claim("SubAccountId", account.SubAccountId.ToString()),
|
new Claim("SubAccountId", account.SubAccountId.ToString()),
|
||||||
new Claim("AdminAreaPermission", account.AdminAreaPermission.ToString()),
|
new Claim("AdminAreaPermission", account.AdminAreaPermission.ToString()),
|
||||||
new Claim("ClientAriaPermission", account.ClientAriaPermission.ToString()),
|
new Claim("ClientAriaPermission", account.ClientAriaPermission.ToString()),
|
||||||
new Claim("IsCamera", "false"),
|
new Claim("IsCamera", "false"),
|
||||||
new Claim("PositionValue",account.PositionValue.ToString()),
|
new Claim("PositionValue",account.PositionValue.ToString()),
|
||||||
//mahanChanges
|
//mahanChanges
|
||||||
new("workshopList",workshopBson),
|
new("workshopList",workshopBson),
|
||||||
new("WorkshopSlug",slug),
|
new("WorkshopSlug",slug),
|
||||||
new("WorkshopName",account.WorkshopName??"")
|
new("WorkshopName",account.WorkshopName??"")
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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(1)
|
ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1)
|
||||||
};
|
};
|
||||||
|
|
||||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||||
new ClaimsPrincipal(claimsIdentity),
|
new ClaimsPrincipal(claimsIdentity),
|
||||||
authProperties);
|
authProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Camera
|
#region Camera
|
||||||
public void CameraSignIn(CameraAuthViewModel account)
|
public void CameraSignIn(CameraAuthViewModel account)
|
||||||
{
|
{
|
||||||
var claims = new List<Claim>
|
var claims = new List<Claim>
|
||||||
{
|
{
|
||||||
new Claim("AccountId", account.Id.ToString()),
|
new Claim("AccountId", account.Id.ToString()),
|
||||||
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
new Claim("Username", account.Username), // Or Use ClaimTypes.NameIdentifier
|
||||||
new Claim("WorkshopId", account.WorkshopId.ToString()),
|
new Claim("WorkshopId", account.WorkshopId.ToString()),
|
||||||
new Claim("WorkshopName", account.WorkshopName),
|
new Claim("WorkshopName", account.WorkshopName),
|
||||||
new Claim("Mobile", account.Mobile),
|
new Claim("Mobile", account.Mobile),
|
||||||
new Claim("AccountId", account.AccountId.ToString()),
|
new Claim("AccountId", account.AccountId.ToString()),
|
||||||
new Claim("IsActiveString", account.IsActiveString),
|
new Claim("IsActiveString", account.IsActiveString),
|
||||||
new Claim("IsCamera", "true"),
|
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 = DateTimeOffset.UtcNow.AddDays(30)
|
||||||
ExpiresUtc = new DateTimeOffset(year: 2100, month: 1, day: 1, hour: 0, minute: 0, second: 0, offset: TimeSpan.Zero)
|
ExpiresUtc = new DateTimeOffset(year: 2100, month: 1, day: 1, hour: 0, minute: 0, second: 0, offset: TimeSpan.Zero)
|
||||||
};
|
};
|
||||||
|
|
||||||
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
_contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||||
new ClaimsPrincipal(claimsIdentity),
|
new ClaimsPrincipal(claimsIdentity),
|
||||||
authProperties);
|
authProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CameraAuthViewModel CameraAccountInfo()
|
public CameraAuthViewModel CameraAccountInfo()
|
||||||
{
|
{
|
||||||
var result = new CameraAuthViewModel();
|
var result = new CameraAuthViewModel();
|
||||||
if (!IsAuthenticated())
|
if (!IsAuthenticated())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||||
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
result.Id = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId").Value);
|
||||||
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
result.Username = claims.FirstOrDefault(x => x.Type == "Username")?.Value;
|
||||||
result.WorkshopId = long.Parse(claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value);
|
result.WorkshopId = long.Parse(claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value);
|
||||||
result.WorkshopName = claims.FirstOrDefault(x => x.Type == "WorkshopName").Value;
|
result.WorkshopName = claims.FirstOrDefault(x => x.Type == "WorkshopName").Value;
|
||||||
result.Mobile = claims.FirstOrDefault(x => x.Type == "Mobile").Value;
|
result.Mobile = claims.FirstOrDefault(x => x.Type == "Mobile").Value;
|
||||||
result.AccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId")?.Value);
|
result.AccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "AccountId")?.Value);
|
||||||
result.IsActiveString = claims.FirstOrDefault(x => x.Type == "IsActiveString").Value;
|
result.IsActiveString = claims.FirstOrDefault(x => x.Type == "IsActiveString").Value;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void SignOut()
|
public void SignOut()
|
||||||
{
|
{
|
||||||
_contextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
_contextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region Pooya
|
#region Pooya
|
||||||
|
|
||||||
public (long Id, UserType userType) GetUserTypeWithId()
|
public (long Id, UserType userType, long roleId) GetUserTypeWithId()
|
||||||
{
|
{
|
||||||
if (!IsAuthenticated())
|
if (!IsAuthenticated())
|
||||||
return (0, UserType.Anonymous);
|
return (0, UserType.Anonymous, 0);
|
||||||
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
var claims = _contextAccessor.HttpContext.User.Claims.ToList();
|
||||||
|
|
||||||
var subAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId")?.Value ?? "0");
|
var subAccountId = long.Parse(claims.FirstOrDefault(x => x.Type == "SubAccountId")?.Value ?? "0");
|
||||||
if (subAccountId > 0)
|
if (subAccountId > 0)
|
||||||
return (subAccountId, UserType.SubAccount);
|
return (subAccountId, UserType.SubAccount, 0);
|
||||||
|
|
||||||
var id = long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value);
|
var id = long.Parse(_contextAccessor.HttpContext.User.Claims.First(x => x.Type == "AccountId")?.Value);
|
||||||
if (claims.FirstOrDefault(x => x.Type == "AdminAreaPermission")?.Value == "true")
|
if (claims.FirstOrDefault(x => x.Type == "AdminAreaPermission")?.Value == "true")
|
||||||
return (id, UserType.Admin);
|
{
|
||||||
|
var roleId = long.Parse(claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value ?? "0");
|
||||||
|
return (id, UserType.Admin, roleId);
|
||||||
|
}
|
||||||
|
|
||||||
return (id, UserType.Client);
|
return (id, UserType.Client, 0);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
8
0_Framework/Application/Enums/ActivationStatus.cs
Normal file
8
0_Framework/Application/Enums/ActivationStatus.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace _0_Framework.Application.Enums;
|
||||||
|
|
||||||
|
public enum ActivationStatus
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Active = 1,
|
||||||
|
DeActive = 2
|
||||||
|
}
|
||||||
8
0_Framework/Application/Enums/LegalType.cs
Normal file
8
0_Framework/Application/Enums/LegalType.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace _0_Framework.Application.Enums;
|
||||||
|
|
||||||
|
public enum LegalType
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Real = 1,
|
||||||
|
Legal = 2
|
||||||
|
}
|
||||||
@@ -23,5 +23,5 @@ public interface IAuthHelper
|
|||||||
long CurrentSubAccountId();
|
long CurrentSubAccountId();
|
||||||
string GetWorkshopSlug();
|
string GetWorkshopSlug();
|
||||||
string GetWorkshopName();
|
string GetWorkshopName();
|
||||||
(long Id, UserType userType) GetUserTypeWithId();
|
(long Id, UserType userType, long roleId) GetUserTypeWithId();
|
||||||
}
|
}
|
||||||
@@ -4,5 +4,5 @@ public enum IsActive
|
|||||||
{
|
{
|
||||||
False,
|
False,
|
||||||
True,
|
True,
|
||||||
|
None
|
||||||
}
|
}
|
||||||
@@ -51,4 +51,11 @@ public class OperationResult<T>
|
|||||||
Message = message;
|
Message = message;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
public OperationResult<T> Failed(string message, T data)
|
||||||
|
{
|
||||||
|
IsSuccedded = false;
|
||||||
|
Message = message;
|
||||||
|
Data = data;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
7
0_Framework/Application/SelectListViewModel.cs
Normal file
7
0_Framework/Application/SelectListViewModel.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace _0_Framework.Application;
|
||||||
|
|
||||||
|
public class SelectListViewModel
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
public string Text { get; set; }
|
||||||
|
}
|
||||||
@@ -320,8 +320,16 @@ public class SmsService : ISmsService
|
|||||||
|
|
||||||
public async Task<double> GetCreditAmount()
|
public async Task<double> GetCreditAmount()
|
||||||
{
|
{
|
||||||
var credit = await SmsIr.GetCreditAsync();
|
try
|
||||||
return (double)credit.Data;
|
{
|
||||||
|
var credit = await SmsIr.GetCreditAsync();
|
||||||
|
return (double)credit.Data;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ public static class StaticWorkshopAccounts
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static List<long> SelectedAccountsRoleIds = [3, 5, 7, 8];
|
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>
|
/// <summary>
|
||||||
/// لیست اکانتهایی که به همه کارگاه ها باید دسترسی داشته باشند
|
/// لیست اکانتهایی که به همه کارگاه ها باید دسترسی داشته باشند
|
||||||
/// 2 - صادق فرخی
|
/// 2 - صادق فرخی
|
||||||
|
|||||||
@@ -385,11 +385,27 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const int SetWorkshopWorkingHoursPermissionCode = 10606;
|
public const int SetWorkshopWorkingHoursPermissionCode = 10606;
|
||||||
|
|
||||||
|
#region حساب کاربری دوربین
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// تنظیمات حساب کاربری دوربین
|
/// تنظیمات حساب کاربری دوربین
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const int CameraAccountSettingsPermissionCode = 10607;
|
public const int CameraAccountSettingsPermissionCode = 10607;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فعال/غیرفعال اکانت دوربین
|
||||||
|
/// </summary>
|
||||||
|
public const int CameraAccountActivationBtnPermissionCode = 1060701;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ویرایش اکانت دوربین
|
||||||
|
/// </summary>
|
||||||
|
public const int CameraAccountEditPermissionCode = 1060702;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region کارپوشه
|
#region کارپوشه
|
||||||
@@ -744,6 +760,22 @@
|
|||||||
Code = CameraAccountSettingsPermissionCode,
|
Code = CameraAccountSettingsPermissionCode,
|
||||||
ParentId = RollCallOperationsPermissionCode
|
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
|
#endregion
|
||||||
|
|
||||||
#region کارپوشه,ParentId = WorkFlowOperationsPermissionCode
|
#region کارپوشه,ParentId = WorkFlowOperationsPermissionCode
|
||||||
|
|||||||
@@ -41,6 +41,23 @@ public static class Tools
|
|||||||
return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
|
return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع و تعداد ماه را میگیرد و تاریخ پایان قراردا را بر میگرداند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <param name="monthPlus"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static (DateTime endDateGr, string endDateFa) FindEndOfContract(string startDate, string monthPlus)
|
||||||
|
{
|
||||||
|
|
||||||
|
int startYear = Convert.ToInt32(startDate.Substring(0, 4));
|
||||||
|
int startMonth = Convert.ToInt32(startDate.Substring(5, 2));
|
||||||
|
int startDay = Convert.ToInt32(startDate.Substring(8, 2));
|
||||||
|
var start = new PersianDateTime(startYear, startMonth, startDay);
|
||||||
|
var end = (start.AddMonths(Convert.ToInt32(monthPlus))).AddDays(-1);
|
||||||
|
return ($"{end}".ToGeorgianDateTime(), $"{end}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
|
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
|
||||||
@@ -458,25 +475,30 @@ public static class Tools
|
|||||||
public static double MoneyToDouble(this string myMoney)
|
public static double MoneyToDouble(this string myMoney)
|
||||||
{
|
{
|
||||||
string bb = string.Empty;
|
string bb = string.Empty;
|
||||||
|
bool isNegative = false;
|
||||||
|
|
||||||
for (int x = 0; x < myMoney.Length; x++)
|
for (int x = 0; x < myMoney.Length; x++)
|
||||||
{
|
{
|
||||||
if (char.IsDigit(myMoney[x]))
|
if (char.IsDigit(myMoney[x]))
|
||||||
|
{
|
||||||
bb += myMoney[x];
|
bb += myMoney[x];
|
||||||
|
}
|
||||||
|
else if (myMoney[x] == '-' && bb.Length == 0)
|
||||||
|
{
|
||||||
|
// اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر
|
||||||
|
isNegative = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bb.Length > 0)
|
if (bb.Length > 0)
|
||||||
{
|
{
|
||||||
double res = double.Parse(bb);
|
double res = double.Parse(bb);
|
||||||
return res;
|
return isNegative ? -res : res;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public static string ToFileName(this DateTime date)
|
public static string ToFileName(this DateTime date)
|
||||||
{
|
{
|
||||||
@@ -598,90 +620,90 @@ public static class Tools
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static int YearTotalDays(this string date)
|
public static int YearTotalDays(this string date)
|
||||||
{
|
{
|
||||||
int y2 = 365;
|
int y2 = 366;
|
||||||
var year = Convert.ToInt32(date.Substring(0, 4));
|
var year = Convert.ToInt32(date.Substring(0, 4));
|
||||||
|
|
||||||
|
|
||||||
switch (year)
|
switch (year)
|
||||||
{
|
{
|
||||||
case 1346:
|
case 1346:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1350:
|
case 1350:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1354:
|
case 1354:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1358:
|
case 1358:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1362:
|
case 1362:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1366:
|
case 1366:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1370:
|
case 1370:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1375:
|
case 1375:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1379:
|
case 1379:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1383:
|
case 1383:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1387:
|
case 1387:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1391:
|
case 1391:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1395:
|
case 1395:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1399:
|
case 1399:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1403:
|
case 1403:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1408:
|
case 1408:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1412:
|
case 1412:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1416:
|
case 1416:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1420:
|
case 1420:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1424:
|
case 1424:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1428:
|
case 1428:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1432:
|
case 1432:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1436:
|
case 1436:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1441:
|
case 1441:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
case 1445:
|
case 1445:
|
||||||
y2 = 366;
|
y2 = 367;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
y2 = 365;
|
y2 = 366;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -884,30 +906,39 @@ public static class Tools
|
|||||||
string result = "";
|
string result = "";
|
||||||
switch (value)
|
switch (value)
|
||||||
{
|
{
|
||||||
|
case "1":
|
||||||
case "01":
|
case "01":
|
||||||
result = "فروردین";
|
result = "فروردین";
|
||||||
break;
|
break;
|
||||||
|
case "2":
|
||||||
case "02":
|
case "02":
|
||||||
result = "اردیبهشت";
|
result = "اردیبهشت";
|
||||||
break;
|
break;
|
||||||
|
case "3":
|
||||||
case "03":
|
case "03":
|
||||||
result = "خرداد";
|
result = "خرداد";
|
||||||
break;
|
break;
|
||||||
|
case "4":
|
||||||
case "04":
|
case "04":
|
||||||
result = "تیر";
|
result = "تیر";
|
||||||
break;
|
break;
|
||||||
|
case "5":
|
||||||
case "05":
|
case "05":
|
||||||
result = "مرداد";
|
result = "مرداد";
|
||||||
break;
|
break;
|
||||||
|
case "6":
|
||||||
case "06":
|
case "06":
|
||||||
result = "شهریور";
|
result = "شهریور";
|
||||||
break;
|
break;
|
||||||
|
case "7":
|
||||||
case "07":
|
case "07":
|
||||||
result = "مهر";
|
result = "مهر";
|
||||||
break;
|
break;
|
||||||
|
case "8":
|
||||||
case "08":
|
case "08":
|
||||||
result = "آبان";
|
result = "آبان";
|
||||||
break;
|
break;
|
||||||
|
case "9":
|
||||||
case "09":
|
case "09":
|
||||||
result = "آذر";
|
result = "آذر";
|
||||||
break;
|
break;
|
||||||
@@ -1403,6 +1434,8 @@ public static class Tools
|
|||||||
|
|
||||||
if (@char == char.Parse("ي"))
|
if (@char == char.Parse("ي"))
|
||||||
res += "ی";
|
res += "ی";
|
||||||
|
else if (@char == char.Parse("ك"))
|
||||||
|
res += "ک";
|
||||||
else
|
else
|
||||||
res += @char;
|
res += @char;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,20 +32,22 @@ public class UidService : IUidService
|
|||||||
var json = JsonConvert.SerializeObject(request);
|
var json = JsonConvert.SerializeObject(request);
|
||||||
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
|
|
||||||
if (!requestResult.IsSuccessStatusCode)
|
if (!requestResult.IsSuccessStatusCode)
|
||||||
return null;
|
return null;
|
||||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
|
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
|
||||||
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian();
|
if (responseResult.BasicInformation != null)
|
||||||
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian();
|
{
|
||||||
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian();
|
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName?.ToPersian();
|
||||||
|
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName?.ToPersian();
|
||||||
|
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName?.ToPersian();
|
||||||
|
}
|
||||||
|
|
||||||
return responseResult;
|
return responseResult;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch
|
||||||
{
|
{
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -63,19 +65,12 @@ public class UidService : IUidService
|
|||||||
};
|
};
|
||||||
var json = JsonConvert.SerializeObject(request);
|
var json = JsonConvert.SerializeObject(request);
|
||||||
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
try
|
|
||||||
{
|
|
||||||
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
|
|
||||||
if (!requestResult.IsSuccessStatusCode)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
|
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
|
||||||
return responseResult;
|
if (!requestResult.IsSuccessStatusCode)
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
|
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
|
||||||
|
return responseResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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> GetAccountsByPositionId(long positionId);
|
||||||
|
|
||||||
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
||||||
|
Task<List<AccountSelectListViewModel>> GetAdminSelectList();
|
||||||
|
|
||||||
OperationResult ReLogin();
|
OperationResult ReLogin();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace AccountManagement.Application.Contracts.Media
|
namespace AccountManagement.Application.Contracts.Media
|
||||||
{
|
{
|
||||||
public interface IMediaApplication
|
public interface IMediaApplication
|
||||||
{
|
{
|
||||||
MediaViewModel Get(long id);
|
MediaViewModel Get(long id);
|
||||||
OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength, List<string> allowedExtensions);
|
OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||||
OperationResult MoveFile(long mediaId, string newRelativePath);
|
List<string> allowedExtensions, string category);
|
||||||
OperationResult DeleteFile(long mediaId);
|
OperationResult MoveFile(long mediaId, string newRelativePath);
|
||||||
List<MediaViewModel> GetRange(IEnumerable<long> select);
|
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 PhoneNumber { get; set; }
|
||||||
public string Username { get; set; }
|
public string Username { get; set; }
|
||||||
public string ProfilePhoto { 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 string Title { get; set; }
|
||||||
public long AccountId { get; set; }
|
public long AccountId { get; set; }
|
||||||
public List<int> Permissions { 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 PhoneNumber { get; set; }
|
||||||
public string RePassword { get; set; }
|
public string RePassword { get; set; }
|
||||||
public long SubAccountRoleId { 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 long Id { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public List<int> Permissions { get; set; }
|
public List<int> Permissions { get; set; }
|
||||||
|
public List<long> WorkshopIds { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,4 +21,5 @@ public class EditTask:CreateTask
|
|||||||
public List<AccountViewModel> AssignsLists { get; set; }
|
public List<AccountViewModel> AssignsLists { get; set; }
|
||||||
public bool HasTicket { get; set; }
|
public bool HasTicket { get; set; }
|
||||||
public long TaskScheduleId { get; set; }
|
public long TaskScheduleId { get; set; }
|
||||||
|
public bool HasRequest { get; set; }
|
||||||
}
|
}
|
||||||
@@ -48,6 +48,7 @@ public class TaskViewModel
|
|||||||
public bool CanDelete { get; set; }
|
public bool CanDelete { get; set; }
|
||||||
public bool CanAssign { get; set; }
|
public bool CanAssign { get; set; }
|
||||||
public bool CanCheckRequests { get; set; }
|
public bool CanCheckRequests { get; set; }
|
||||||
|
public bool HasRequest { get; set; }
|
||||||
public AssignViewModel AssignedReceiverViewModel { get; set; }
|
public AssignViewModel AssignedReceiverViewModel { get; set; }
|
||||||
|
|
||||||
public TaskScheduleType ScheduleType { get; set; }
|
public TaskScheduleType ScheduleType { get; set; }
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ public class TaskScheduleDetailsViewModel
|
|||||||
public string ContractingPartyName { get; set; }
|
public string ContractingPartyName { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
public string Count { get; set; }
|
||||||
|
public string FirstEndTaskDate { get; set; }
|
||||||
public List<MediaViewModel> Medias { get; set; }
|
public List<MediaViewModel> Medias { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -308,7 +308,7 @@ public class AccountApplication : IAccountApplication
|
|||||||
{
|
{
|
||||||
Slug = _passwordHasher.SlugHasher(x.WorkshopId),
|
Slug = _passwordHasher.SlugHasher(x.WorkshopId),
|
||||||
Name = x.WorkshopName,
|
Name = x.WorkshopName,
|
||||||
PersonnelCount = 0,
|
PersonnelCount = x.PersonnelCount,
|
||||||
Id = x.WorkshopId
|
Id = x.WorkshopId
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
@@ -627,7 +627,10 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
||||||
|
{
|
||||||
|
return await _accountRepository.GetAdminSelectList();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region Pooya
|
#region Pooya
|
||||||
|
|||||||
@@ -9,147 +9,113 @@ using Microsoft.AspNetCore.Http;
|
|||||||
|
|
||||||
namespace AccountManagement.Application
|
namespace AccountManagement.Application
|
||||||
{
|
{
|
||||||
public class MediaApplication:IMediaApplication
|
public class MediaApplication : IMediaApplication
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
private const string _basePath = "Medias";
|
private const string _basePath = "Medias";
|
||||||
private readonly IMediaRepository _mediaRepository;
|
private readonly IMediaRepository _mediaRepository;
|
||||||
|
|
||||||
public MediaApplication(IMediaRepository mediaRepository)
|
public MediaApplication(IMediaRepository mediaRepository)
|
||||||
{
|
{
|
||||||
_mediaRepository = mediaRepository;
|
_mediaRepository = mediaRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
|
/// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="file">فایل</param>
|
/// <param name="file">فایل</param>
|
||||||
/// <param name="fileLabel">برچسب فایل که در نام فایل ظاهر می شود</param>
|
/// <param name="fileLabel">برچسب فایل که در نام فایل ظاهر می شود</param>
|
||||||
/// <param name="relativePath">مسیر فایل</param>
|
/// <param name="relativePath">مسیر فایل</param>
|
||||||
/// <param name="allowedExtensions">[.png,.jpg,.jpeg] پسوند های مجاز مثلا </param>
|
/// <param name="maximumFileLength">حداکثر حجم فایل به مگابایت</param>
|
||||||
/// <param name="maximumFileLength">حداکثر حجم فایل به مگابایت</param>
|
/// <param name="allowedExtensions">[.png,.jpg,.jpeg] پسوند های مجاز مثلا </param>
|
||||||
/// <returns></returns>
|
/// <param name="category"></param>
|
||||||
public OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath,int maximumFileLength,List<string> allowedExtensions)
|
/// <returns></returns>
|
||||||
{
|
public OperationResult UploadFile(IFormFile file, string fileLabel, string relativePath, int maximumFileLength,
|
||||||
OperationResult op = new();
|
List<string> allowedExtensions, string category)
|
||||||
var path = Path.Combine(_basePath, relativePath);
|
{
|
||||||
var fileExtension = Path.GetExtension(file.FileName);
|
return _mediaRepository.UploadFile(file, fileLabel, relativePath, maximumFileLength, allowedExtensions, category);
|
||||||
|
}
|
||||||
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);
|
/// <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}";
|
/// <summary>
|
||||||
var filePath = Path.Combine(path, uniqueFileName);
|
/// جابجا کردن فایل
|
||||||
using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
|
/// </summary>
|
||||||
{
|
public OperationResult MoveFile(long mediaId, string newRelativePath)
|
||||||
file.CopyTo(fileStream);
|
{
|
||||||
}
|
OperationResult op = new();
|
||||||
var mediaEntity = new Media(filePath, extension, "فایل", "EmployeeDocuments");
|
var media = _mediaRepository.Get(mediaId);
|
||||||
_mediaRepository.Create(mediaEntity);
|
var oldPath = media.Path;
|
||||||
_mediaRepository.SaveChanges();
|
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>
|
public List<MediaViewModel> GetRange(IEnumerable<long> ids)
|
||||||
/// حذف فایل
|
{
|
||||||
/// </summary>
|
var medias = _mediaRepository.GetRange(ids);
|
||||||
public OperationResult DeleteFile(long mediaId)
|
return medias.Select(x => new MediaViewModel()
|
||||||
{
|
{
|
||||||
OperationResult op = new();
|
Category = x.Category,
|
||||||
var media = _mediaRepository.Get(mediaId);
|
Path = x.Path,
|
||||||
if (media == null)
|
Id = x.id,
|
||||||
return op.Failed("رکورد مورد نظر یافت نشد");
|
Type = x.Type,
|
||||||
try
|
}).ToList();
|
||||||
{
|
}
|
||||||
if (File.Exists(media.Path))
|
|
||||||
File.Delete(media.Path);
|
|
||||||
else
|
|
||||||
return op.Failed("فایل یافت نشد");
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return op.Failed("خطایی در حذف فایل رخ داده است");
|
|
||||||
}
|
|
||||||
|
|
||||||
_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)
|
if (cmd.PhoneNumber.Length != 11)
|
||||||
return op.Failed("شماره تلفن همراه نامعتبر است");
|
return op.Failed("شماره تلفن همراه نامعتبر است");
|
||||||
|
|
||||||
if (!cmd.WorkshopIds.Any())
|
//if (!cmd.WorkshopIds.Any())
|
||||||
return op.Failed("حداقل یک کارگاه را انتخاب کنید");
|
// return op.Failed("حداقل یک کارگاه را انتخاب کنید");
|
||||||
|
|
||||||
|
|
||||||
if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
//if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||||
return op.Failed("خطای سیستمی");
|
// return op.Failed("خطای سیستمی");
|
||||||
|
|
||||||
|
|
||||||
if (cmd.SubAccountRoleId == 0 || !_subAccountRoleRepository.Exists(x => cmd.SubAccountRoleId == x.id))
|
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))
|
_cameraAccountRepository.Exists(x => x.Username == cmd.Username))
|
||||||
return op.Failed("نام کاربری نمی تواند تکراری باشد");
|
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),
|
var entity = new SubAccount(cmd.AccountId, cmd.SubAccountRoleId, cmd.NationalCode, cmd.FName, cmd.LName, cmd.PhoneNumber, cmd.Username, _passwordHasher.Hash(cmd.Password),
|
||||||
cmd.ProfilePhoto);
|
cmd.ProfilePhoto);
|
||||||
|
|
||||||
@@ -142,7 +146,7 @@ namespace AccountManagement.Application
|
|||||||
_subAccountRepository.SaveChanges();
|
_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)
|
foreach (var w in workshops)
|
||||||
_workshopSubAccountRepository.Create(w);
|
_workshopSubAccountRepository.Create(w);
|
||||||
@@ -175,22 +179,22 @@ namespace AccountManagement.Application
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
//if (!cmd.WorkshopIds.All(x => accountWorkshopsList.Contains(x)))
|
||||||
return op.Failed("خطای سیستمی");
|
// return op.Failed("خطای سیستمی");
|
||||||
|
|
||||||
|
|
||||||
if (cmd.SubAccountRoleId == 0 || !_subAccountRoleRepository.Exists(x => cmd.SubAccountRoleId == x.id))
|
if (cmd.SubAccountRoleId == 0 || !_subAccountRoleRepository.Exists(x => cmd.SubAccountRoleId == x.id))
|
||||||
return op.Failed("نقش مورد نظر وجود ندارد");
|
return op.Failed("نقش مورد نظر وجود ندارد");
|
||||||
|
|
||||||
var workshopSubAccounts = _workshopSubAccountRepository.GetWorkshopsSubAccountEntityBySubAccountId(entity.id);
|
//var workshopSubAccounts = _workshopSubAccountRepository.GetWorkshopsSubAccountEntityBySubAccountId(entity.id);
|
||||||
foreach (var workshopSubAccount in workshopSubAccounts)
|
//foreach (var workshopSubAccount in workshopSubAccounts)
|
||||||
_workshopSubAccountRepository.Remove(workshopSubAccount);
|
// _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)
|
//foreach (var w in workshops)
|
||||||
_workshopSubAccountRepository.Create(w);
|
// _workshopSubAccountRepository.Create(w);
|
||||||
|
|
||||||
entity.Edit(cmd.SubAccountRoleId, cmd.NationalCode, cmd.FName, cmd.LName, cmd.ProfilePhoto);
|
entity.Edit(cmd.SubAccountRoleId, cmd.NationalCode, cmd.FName, cmd.LName, cmd.ProfilePhoto);
|
||||||
_workshopSubAccountRepository.SaveChanges();
|
_workshopSubAccountRepository.SaveChanges();
|
||||||
@@ -227,7 +231,8 @@ namespace AccountManagement.Application
|
|||||||
{
|
{
|
||||||
Id = entity.id,
|
Id = entity.id,
|
||||||
Title = entity.Title,
|
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();
|
OperationResult op = new();
|
||||||
if (_subAccountRoleRepository.Exists(x => x.AccountId == command.AccountId && x.Title.Trim() == command.Title.Trim()))
|
if (_subAccountRoleRepository.Exists(x => x.AccountId == command.AccountId && x.Title.Trim() == command.Title.Trim()))
|
||||||
return op.Failed("یک نقش با این عنوان وجود دارد");
|
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.Create(role);
|
||||||
_subAccountRoleRepository.SaveChanges();
|
_subAccountRoleRepository.SaveChanges();
|
||||||
return op.Succcedded(role.id);
|
return op.Succcedded(role.id);
|
||||||
@@ -254,8 +259,26 @@ namespace AccountManagement.Application
|
|||||||
var entity = _subAccountRoleRepository.Get(cmd.Id);
|
var entity = _subAccountRoleRepository.Get(cmd.Id);
|
||||||
if (entity == null)
|
if (entity == null)
|
||||||
return op.Failed(ApplicationMessages.RecordNotFound);
|
return op.Failed(ApplicationMessages.RecordNotFound);
|
||||||
entity.Edit(cmd.Title, cmd.Permissions);
|
entity.Edit(cmd.Title, cmd.Permissions,cmd.WorkshopIds);
|
||||||
_subAccountRoleRepository.SaveChanges();
|
|
||||||
|
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();
|
return op.Succcedded();
|
||||||
}
|
}
|
||||||
public OperationResult AssignRoleToSubAccount(AssignSubAccountRole command)
|
public OperationResult AssignRoleToSubAccount(AssignSubAccountRole command)
|
||||||
|
|||||||
@@ -597,7 +597,7 @@ public class TaskApplication : ITaskApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
assign.AcceptTimeRequest();
|
assign.AcceptTimeRequest();
|
||||||
message = string.IsNullOrWhiteSpace(message) ? "درخواست شما مورد تایید قرار گرفت" : message;
|
message = string.IsNullOrWhiteSpace(message) ? "درخواست شما مورد تایید قرار گرفت" : message;
|
||||||
var messageEntity = new TaskMessage(message, "تایید درخواست مهلت", assign.id);
|
var messageEntity = new TaskMessage(message, "تایید درخواست مهلت", assign.id);
|
||||||
@@ -622,6 +622,7 @@ public class TaskApplication : ITaskApplication
|
|||||||
{
|
{
|
||||||
return operation.Failed("چنین وظیفه ای درخواستی برای مهلت ندارد");
|
return operation.Failed("چنین وظیفه ای درخواستی برای مهلت ندارد");
|
||||||
}
|
}
|
||||||
|
|
||||||
assign.RejectTimeRequest();
|
assign.RejectTimeRequest();
|
||||||
if (assign.EndTaskDate.Date <= DateTime.Now.Date)
|
if (assign.EndTaskDate.Date <= DateTime.Now.Date)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ namespace AccountManagement.Domain.AccountAgg
|
|||||||
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
List<AccountViewModel> GetAccountEqualToLowerPositionValue();
|
||||||
AccountViewModel GetAccountViewModel(long id);
|
AccountViewModel GetAccountViewModel(long id);
|
||||||
List<AccountViewModel> GetAccountsDeactivePositionValue(long Positionid);
|
List<AccountViewModel> GetAccountsDeactivePositionValue(long Positionid);
|
||||||
|
Task<List<AccountSelectListViewModel>> GetAdminSelectList();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
List<AccountViewModel> GetAdminAccountsNew();
|
List<AccountViewModel> GetAdminAccountsNew();
|
||||||
|
|||||||
@@ -71,14 +71,16 @@ public class Assign : EntityBase
|
|||||||
|
|
||||||
public void AcceptTimeRequest()
|
public void AcceptTimeRequest()
|
||||||
{
|
{
|
||||||
TimeRequest = false;
|
ClearRequests();
|
||||||
|
TimeRequest = false;
|
||||||
AcceptedTimeRequest++;
|
AcceptedTimeRequest++;
|
||||||
EndTaskDate = RequestDate < DateTime.Today ? DateTime.Today : RequestDate.Value;
|
EndTaskDate = RequestDate < DateTime.Today ? DateTime.Today : RequestDate.Value;
|
||||||
|
|
||||||
}
|
}
|
||||||
public void RejectTimeRequest()
|
public void RejectTimeRequest()
|
||||||
{
|
{
|
||||||
TimeRequest = false;
|
ClearRequests();
|
||||||
|
TimeRequest = false;
|
||||||
TimeRequestDescription = null;
|
TimeRequestDescription = null;
|
||||||
RequestDate = null;
|
RequestDate = null;
|
||||||
}
|
}
|
||||||
@@ -92,31 +94,36 @@ public class Assign : EntityBase
|
|||||||
}
|
}
|
||||||
public void AcceptCancelRequest()
|
public void AcceptCancelRequest()
|
||||||
{
|
{
|
||||||
IsCanceledRequest = false;
|
ClearRequests();
|
||||||
|
IsCanceledRequest = false;
|
||||||
IsCancel = true;
|
IsCancel = true;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public void RejectCancel()
|
public void RejectCancel()
|
||||||
{
|
{
|
||||||
CancelDescription = null;
|
ClearRequests();
|
||||||
|
CancelDescription = null;
|
||||||
IsCanceledRequest = false;
|
IsCanceledRequest = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CompleteRequest(string? doneDescription)
|
public void CompleteRequest(string? doneDescription)
|
||||||
{
|
{
|
||||||
DoneDescription = doneDescription;
|
ClearRequests();
|
||||||
|
DoneDescription = doneDescription;
|
||||||
IsDoneRequest = true;
|
IsDoneRequest = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RejectCompleteRequest()
|
public void RejectCompleteRequest()
|
||||||
{
|
{
|
||||||
IsDoneRequest = false;
|
ClearRequests();
|
||||||
|
IsDoneRequest = false;
|
||||||
DoneDescription = null;
|
DoneDescription = null;
|
||||||
}
|
}
|
||||||
public void Completed()
|
public void Completed()
|
||||||
{
|
{
|
||||||
IsDoneRequest = false;
|
ClearRequests();
|
||||||
|
IsDoneRequest = false;
|
||||||
IsDone = true;
|
IsDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,6 +135,13 @@ public class Assign : EntityBase
|
|||||||
TimeRequest = false;
|
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,
|
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)
|
bool isCancel,string cancelDescription,bool isDone,bool isDoneRequest,string? doneDescription)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using AccountManagement.Application.Contracts.Media;
|
using AccountManagement.Application.Contracts.Media;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
|
||||||
namespace AccountManagement.Domain.MediaAgg;
|
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);
|
void CreateMediaWithTaskMedia(long taskId, long mediaId);
|
||||||
List<MediaViewModel> GetMediaByTaskId(long taskId);
|
List<MediaViewModel> GetMediaByTaskId(long taskId);
|
||||||
void Remove(long id);
|
void Remove(long id);
|
||||||
@@ -23,4 +26,6 @@ public interface IMediaRepository:IRepository<long,Media>
|
|||||||
|
|
||||||
#endregion
|
#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 _0_Framework.Domain;
|
||||||
using AccountManagement.Application.Contracts.SubAccount;
|
using AccountManagement.Application.Contracts.SubAccount;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
|
||||||
namespace AccountManagement.Domain.SubAccountAgg
|
namespace AccountManagement.Domain.SubAccountAgg
|
||||||
{
|
{
|
||||||
@@ -13,5 +14,6 @@ namespace AccountManagement.Domain.SubAccountAgg
|
|||||||
SubAccount GetDetails(long subAccountId);
|
SubAccount GetDetails(long subAccountId);
|
||||||
SubAccount GetBy(string commandUsername);
|
SubAccount GetBy(string commandUsername);
|
||||||
SubAccountViewModel GetByVerifyCodeAndPhoneNumber(string code, string phone);
|
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<SubAccountRolePermission> RolePermissions { get; private set; }
|
||||||
public List<SubAccount> SubAccounts { get; private set; }
|
public List<SubAccount> SubAccounts { get; private set; }
|
||||||
|
public List<SubAccountRoleWorkshop> RoleWorkshops { get; set; }
|
||||||
|
|
||||||
private SubAccountRole()
|
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;
|
Title = title;
|
||||||
RolePermissions = permissions.Select(x => new SubAccountRolePermission(x, id)).ToList();
|
RolePermissions = permissions.Select(x => new SubAccountRolePermission(x, id)).ToList();
|
||||||
AccountId = accountId;
|
AccountId = accountId;
|
||||||
|
RoleWorkshops = workshopIds.Select(x => new SubAccountRoleWorkshop(x, id)).ToList();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChangeTitle(string title)
|
public void ChangeTitle(string title)
|
||||||
{
|
{
|
||||||
Title = title;
|
Title = title;
|
||||||
@@ -32,10 +36,12 @@ namespace AccountManagement.Domain.SubAccountRoleAgg
|
|||||||
{
|
{
|
||||||
RolePermissions.AddRange(permissionIds.Select(x => new SubAccountRolePermission(x, id)));
|
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;
|
Title = title;
|
||||||
RolePermissions = permissions.Select(x => new SubAccountRolePermission(x, id)).ToList();
|
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; }
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ public class TaskSchedule:EntityBase
|
|||||||
UnitType = unitType;
|
UnitType = unitType;
|
||||||
UnitNumber = unitNumber;
|
UnitNumber = unitNumber;
|
||||||
LastEndTaskDate = lastEndTaskDate;
|
LastEndTaskDate = lastEndTaskDate;
|
||||||
IsActive = IsActive.False;
|
IsActive = IsActive.True;
|
||||||
}
|
}
|
||||||
public string Count { get; private set; }
|
public string Count { get; private set; }
|
||||||
public TaskScheduleType Type { get; private set; }
|
public TaskScheduleType Type { get; private set; }
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ namespace AccountMangement.Infrastructure.EFCore.Mappings
|
|||||||
opt.WithOwner(x => x.SubAccountRole);
|
opt.WithOwner(x => x.SubAccountRole);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
builder.OwnsMany(x => x.RoleWorkshops, roleWorkshop =>
|
||||||
|
{
|
||||||
|
roleWorkshop.WithOwner(x => x.SubAccountRole).HasForeignKey(x => x.SubAccountId);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1078,6 +1078,33 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b =>
|
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 =>
|
b.OwnsMany("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRolePermission", "RolePermissions", b1 =>
|
||||||
{
|
{
|
||||||
b1.Property<long>("id")
|
b1.Property<long>("id")
|
||||||
@@ -1105,6 +1132,8 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
b.Navigation("RolePermissions");
|
b.Navigation("RolePermissions");
|
||||||
|
|
||||||
|
b.Navigation("RoleWorkshops");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
|
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
|
||||||
|
|||||||
@@ -312,6 +312,17 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
|
|||||||
IsActiveString = x.IsActive ? "true" : "false",
|
IsActiveString = x.IsActive ? "true" : "false",
|
||||||
}).ToList();
|
}).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()
|
//public List<AccountViewModel> GetAdminAccounts()
|
||||||
//{
|
//{
|
||||||
// return _context.Accounts.Where(x=>x.AdminAreaPermission == "true" && x.IsActiveString == "true").Select(x => new AccountViewModel()
|
// return _context.Accounts.Where(x=>x.AdminAreaPermission == "true" && x.IsActiveString == "true").Select(x => new AccountViewModel()
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using _0_Framework.Application;
|
||||||
using _0_Framework.InfraStructure;
|
using _0_Framework.InfraStructure;
|
||||||
using AccountManagement.Application.Contracts.Media;
|
using AccountManagement.Application.Contracts.Media;
|
||||||
using AccountManagement.Domain.AdminResponseMediaAgg;
|
using AccountManagement.Domain.AdminResponseMediaAgg;
|
||||||
@@ -7,27 +10,35 @@ using AccountManagement.Domain.ClientResponseMediaAgg;
|
|||||||
using AccountManagement.Domain.MediaAgg;
|
using AccountManagement.Domain.MediaAgg;
|
||||||
using AccountManagement.Domain.TaskMediaAgg;
|
using AccountManagement.Domain.TaskMediaAgg;
|
||||||
using AccountManagement.Domain.TicketMediasAgg;
|
using AccountManagement.Domain.TicketMediasAgg;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
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;
|
private readonly AccountContext _accountContext;
|
||||||
public MediaRepository( AccountContext taskManagerContext) : base(taskManagerContext)
|
public MediaRepository(AccountContext taskManagerContext, IWebHostEnvironment webHostEnvironment) : base(taskManagerContext)
|
||||||
{
|
{
|
||||||
_accountContext = taskManagerContext;
|
_accountContext = taskManagerContext;
|
||||||
|
BasePath = webHostEnvironment.ContentRootPath + "/Storage";
|
||||||
}
|
}
|
||||||
//ساخت جدول واسط بین مدیا و نسک
|
//ساخت جدول واسط بین مدیا و نسک
|
||||||
//نکته: این متد ذخیره انجام نمیدهد
|
//نکته: این متد ذخیره انجام نمیدهد
|
||||||
|
|
||||||
public void CreateMediaWithTaskMedia(long taskId, long mediaId)
|
public void CreateMediaWithTaskMedia(long taskId, long mediaId)
|
||||||
{
|
{
|
||||||
var Taskmedias = new TaskMedia(taskId,mediaId);
|
var Taskmedias = new TaskMedia(taskId, mediaId);
|
||||||
_accountContext.Add(Taskmedias);
|
_accountContext.Add(Taskmedias);
|
||||||
}
|
}
|
||||||
public void Remove(long id)
|
public void Remove(long id)
|
||||||
{
|
{
|
||||||
var media = Get(id);
|
var media = Get(id);
|
||||||
Remove(media);
|
Remove(media);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,6 +88,48 @@ public class MediaRepository:RepositoryBase<long,Media>,IMediaRepository
|
|||||||
{
|
{
|
||||||
return _accountContext.Medias.Where(x => mediaIds.Contains(x.id)).ToList();
|
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
|
#endregion
|
||||||
|
|||||||
@@ -77,5 +77,10 @@ namespace AccountMangement.Infrastructure.EFCore.Repository
|
|||||||
Username = entity.Username
|
Username = entity.Username
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<SubAccount> GetBySubAccountRole(long subAccountRoleId)
|
||||||
|
{
|
||||||
|
return _context.SubAccounts.Where(x => x.SubAccountRoleId == subAccountRoleId).ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,14 +106,16 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
{
|
{
|
||||||
res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId)
|
res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId)
|
||||||
.EndTaskDate.ToFarsi();
|
.EndTaskDate.ToFarsi();
|
||||||
|
var userAssign = res.AssignViewModels.First(x => x.AssignedId == userId);
|
||||||
|
|
||||||
res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList();
|
res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList();
|
||||||
res.IsDone = res.AssignViewModels.First(x => x.AssignedId == userId).IsDone;
|
res.IsDone = userAssign.IsDone;
|
||||||
res.IsCancel = res.AssignViewModels.First(x => x.AssignedId == userId).IsCancel;
|
res.IsCancel = userAssign.IsCancel;
|
||||||
|
res.HasRequest = userAssign.IsCanceledRequest || userAssign.TimeRequest ||
|
||||||
|
userAssign.IsDoneRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res.TaskScheduleId>0)
|
if (res.TaskScheduleId > 0)
|
||||||
{
|
{
|
||||||
var taskSchedule = _accountContext.TaskSchedules.FirstOrDefault(x => x.id == res.TaskScheduleId);
|
var taskSchedule = _accountContext.TaskSchedules.FirstOrDefault(x => x.id == res.TaskScheduleId);
|
||||||
|
|
||||||
@@ -121,7 +123,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
res.ScheduleType = taskSchedule.Type;
|
res.ScheduleType = taskSchedule.Type;
|
||||||
res.ScheduleCount = taskSchedule.Count;
|
res.ScheduleCount = taskSchedule.Count;
|
||||||
res.ScheduleUnitNumber = taskSchedule.UnitNumber;
|
res.ScheduleUnitNumber = taskSchedule.UnitNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//_accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask()
|
//_accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask()
|
||||||
@@ -160,8 +162,6 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
Remove(task);
|
Remove(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public List<TaskViewModel> GetRequestedTasks(TaskSearchModel searchModel)
|
public List<TaskViewModel> GetRequestedTasks(TaskSearchModel searchModel)
|
||||||
{
|
{
|
||||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||||
@@ -900,7 +900,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -1229,7 +1229,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -1788,7 +1788,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -1866,7 +1866,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
.Include(x => x.Task).ThenInclude(x => x.TaskSchedule)
|
.Include(x => x.Task).ThenInclude(x => x.TaskSchedule)
|
||||||
.Where(x =>
|
.Where(x =>
|
||||||
x.Task.IsActiveString == "true" && x.Task.SenderId == accountId
|
x.Task.IsActiveString == "true" && x.Task.SenderId == accountId
|
||||||
&& x.Task.TaskScheduleId != null && x.Task.TaskScheduleId > 0 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest));
|
&& x.Task.TaskScheduleId != null && x.Task.TaskScheduleId > 0 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TaskSchedule.IsActive== IsActive.True);
|
||||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||||
{
|
{
|
||||||
raw = raw.Where(x =>
|
raw = raw.Where(x =>
|
||||||
@@ -2056,7 +2056,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
TaskScheduleId = x.TaskScheduleId
|
TaskScheduleId = x.TaskScheduleId
|
||||||
|
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
|
||||||
final = final.Select(x => new TaskViewModel()
|
final = final.Select(x => new TaskViewModel()
|
||||||
@@ -2082,7 +2082,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -2095,7 +2095,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
ScheduleUnitType = x.ScheduleUnitType,
|
ScheduleUnitType = x.ScheduleUnitType,
|
||||||
TaskScheduleId = x.TaskScheduleId
|
TaskScheduleId = x.TaskScheduleId
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
final = final.Select(x => new TaskViewModel()
|
final = final.Select(x => new TaskViewModel()
|
||||||
{
|
{
|
||||||
@@ -2149,12 +2149,15 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
ScheduleUnitType = x.ScheduleUnitType,
|
ScheduleUnitType = x.ScheduleUnitType,
|
||||||
TaskScheduleId = x.TaskScheduleId
|
TaskScheduleId = x.TaskScheduleId
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string SetTasksColors(DateTime date, bool isCancel)
|
public string SetTasksColors(DateTime date, bool isCancel,bool hasRequest)
|
||||||
{
|
{
|
||||||
|
if (hasRequest)
|
||||||
|
return "red";
|
||||||
|
|
||||||
if (isCancel)
|
if (isCancel)
|
||||||
{
|
{
|
||||||
//return "brown";
|
//return "brown";
|
||||||
@@ -2390,7 +2393,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
|
|
||||||
public List<Tasks> GetTasksByTaskScheduleId(long taskScheduleId)
|
public List<Tasks> GetTasksByTaskScheduleId(long taskScheduleId)
|
||||||
{
|
{
|
||||||
return _accountContext.Tasks.Include(x=>x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList();
|
return _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2658,7 +2661,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -2722,6 +2725,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
{
|
{
|
||||||
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
||||||
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
||||||
|
var today = DateTime.Today;
|
||||||
var emptyAcc = new AccountViewModel()
|
var emptyAcc = new AccountViewModel()
|
||||||
{
|
{
|
||||||
Fullname = "-",
|
Fullname = "-",
|
||||||
@@ -2731,7 +2735,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
|
var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
|
||||||
.ThenInclude(x => x.Media)
|
.ThenInclude(x => x.Media)
|
||||||
.Where(x =>
|
.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))
|
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||||
{
|
{
|
||||||
raw = raw.Where(x =>
|
raw = raw.Where(x =>
|
||||||
@@ -2764,6 +2768,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
|
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
|
||||||
Description = x.Task.Description,
|
Description = x.Task.Description,
|
||||||
IsDoneRequest = x.IsDoneRequest,
|
IsDoneRequest = x.IsDoneRequest,
|
||||||
|
|
||||||
});
|
});
|
||||||
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
|
||||||
{
|
{
|
||||||
@@ -2802,7 +2807,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
ContractingPartyName = x.ContractingPartyName,
|
ContractingPartyName = x.ContractingPartyName,
|
||||||
MediaCount = x.MediaCount,
|
MediaCount = x.MediaCount,
|
||||||
Description = x.Description,
|
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))
|
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
||||||
{
|
{
|
||||||
@@ -2871,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)
|
var orderResult = result.OrderBy(x => x.IsDone || x.IsCancel)
|
||||||
.ThenBy(x => x.EndTaskDateGE);
|
.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();
|
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
|
||||||
@@ -2906,7 +2914,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
MediaCount = x.MediaCount,
|
MediaCount = x.MediaCount,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
Description = x.Description,
|
Description = x.Description,
|
||||||
IsDoneRequest = x.IsDoneRequest
|
IsDoneRequest = x.IsDoneRequest,
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
@@ -2934,7 +2942,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
||||||
IsCancelRequest = x.IsCancelRequest,
|
IsCancelRequest = x.IsCancelRequest,
|
||||||
ContractingPartyName = x.ContractingPartyName,
|
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,
|
MediaCount = x.MediaCount,
|
||||||
HasAttachment = x.MediaCount > 0,
|
HasAttachment = x.MediaCount > 0,
|
||||||
SelfName = x.SelfName,
|
SelfName = x.SelfName,
|
||||||
@@ -2993,6 +3001,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|||||||
AssignedName = "-",
|
AssignedName = "-",
|
||||||
AssignedPositionValue = 0
|
AssignedPositionValue = 0
|
||||||
},
|
},
|
||||||
|
HasRequest = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,25 +3,26 @@ using System.Threading.Tasks;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.InfraStructure;
|
using _0_Framework.InfraStructure;
|
||||||
using AccountManagement.Application.Contracts.Media;
|
using AccountManagement.Application.Contracts.Media;
|
||||||
|
using AccountManagement.Application.Contracts.Task;
|
||||||
using AccountManagement.Application.Contracts.TaskSchedule;
|
using AccountManagement.Application.Contracts.TaskSchedule;
|
||||||
using AccountManagement.Domain.TaskScheduleAgg;
|
using AccountManagement.Domain.TaskScheduleAgg;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
||||||
|
|
||||||
public class TaskScheduleRepository: RepositoryBase<long, TaskSchedule>, ITaskScheduleRepository
|
public class TaskScheduleRepository : RepositoryBase<long, TaskSchedule>, ITaskScheduleRepository
|
||||||
{
|
{
|
||||||
private readonly AccountContext _accountContext;
|
private readonly AccountContext _accountContext;
|
||||||
|
|
||||||
public TaskScheduleRepository(AccountContext accountContext):base(accountContext)
|
public TaskScheduleRepository(AccountContext accountContext) : base(accountContext)
|
||||||
{
|
{
|
||||||
_accountContext = accountContext;
|
_accountContext = accountContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TaskScheduleDetailsViewModel> GetDetails(long id)
|
public async Task<TaskScheduleDetailsViewModel> GetDetails(long id)
|
||||||
{
|
{
|
||||||
var taskSchedule=await _accountContext.TaskSchedules.Include(x=>x.TasksList).ThenInclude(x=>x.Assigns)
|
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);
|
.Include(x => x.TasksList).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media).FirstOrDefaultAsync(x => x.id == id);
|
||||||
if (taskSchedule == null)
|
if (taskSchedule == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@@ -29,7 +30,7 @@ public class TaskScheduleRepository: RepositoryBase<long, TaskSchedule>, ITaskSc
|
|||||||
|
|
||||||
var firstTaskDetails = taskSchedule.TasksList.First();
|
var firstTaskDetails = taskSchedule.TasksList.First();
|
||||||
|
|
||||||
var firstTimeAssigns = firstTaskDetails.Assigns.Where(x=>x.FirstTimeCreation).ToList();
|
var firstTimeAssigns = firstTaskDetails.Assigns.Where(x => x.FirstTimeCreation).ToList();
|
||||||
|
|
||||||
var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList();
|
var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList();
|
||||||
|
|
||||||
@@ -46,13 +47,15 @@ public class TaskScheduleRepository: RepositoryBase<long, TaskSchedule>, ITaskSc
|
|||||||
Title = firstTaskDetails.Title,
|
Title = firstTaskDetails.Title,
|
||||||
Description = firstTaskDetails.Description,
|
Description = firstTaskDetails.Description,
|
||||||
ContractingPartyName = firstTaskDetails.ContractingPartyName,
|
ContractingPartyName = firstTaskDetails.ContractingPartyName,
|
||||||
AssignedName = assignedAccounts.Select(x=>x.Fullname).ToList(),
|
AssignedName = assignedAccounts.Select(x => x.Fullname).ToList(),
|
||||||
CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(),
|
CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(),
|
||||||
SenderName = sender.Fullname,
|
SenderName = sender.Fullname,
|
||||||
TaskScheduleType = taskSchedule.Type,
|
TaskScheduleType = taskSchedule.Type,
|
||||||
TaskScheduleUnitType = taskSchedule.UnitType,
|
TaskScheduleUnitType = taskSchedule.UnitType,
|
||||||
UnitNumber = taskSchedule.UnitNumber,
|
UnitNumber = taskSchedule.UnitNumber,
|
||||||
Medias = firstTaskDetails.TaskMedias.Select(x=> new MediaViewModel()
|
Count = taskSchedule.Type == TaskScheduleType.Limited ? taskSchedule.Count : "نامحدود",
|
||||||
|
FirstEndTaskDate = firstTaskDetails.Assigns.FirstOrDefault()?.EndTaskDate.ToFarsi() ?? "",
|
||||||
|
Medias = firstTaskDetails.TaskMedias.Select(x => new MediaViewModel()
|
||||||
{
|
{
|
||||||
Category = x.Media.Category,
|
Category = x.Media.Category,
|
||||||
Id = x.MediaId,
|
Id = x.MediaId,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
|
using Company.Domain.CheckoutAgg.ValueObjects;
|
||||||
|
using Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
||||||
using Company.Domain.WorkshopAgg;
|
using Company.Domain.WorkshopAgg;
|
||||||
|
|
||||||
namespace Company.Domain.CheckoutAgg;
|
namespace Company.Domain.CheckoutAgg;
|
||||||
@@ -21,7 +25,11 @@ public class Checkout : EntityBase
|
|||||||
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
|
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
|
||||||
, string archiveCode, string personnelCode,
|
, string archiveCode, string personnelCode,
|
||||||
string totalClaims, string totalDeductions, double totalPayment, string signature, double marriedAllowance, bool leaveCheckout,
|
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;
|
EmployeeFullName = employeeFullName;
|
||||||
FathersName = fathersName;
|
FathersName = fathersName;
|
||||||
@@ -78,6 +86,8 @@ public class Checkout : EntityBase
|
|||||||
TotalDayOfLeaveCompute = totalDayOfLeaveCompute;
|
TotalDayOfLeaveCompute = totalDayOfLeaveCompute;
|
||||||
TotalDayOfYearsCompute = totalDayOfYearsCompute;
|
TotalDayOfYearsCompute = totalDayOfYearsCompute;
|
||||||
TotalDayOfBunosesCompute = totalDayOfBunosesCompute;
|
TotalDayOfBunosesCompute = totalDayOfBunosesCompute;
|
||||||
|
LoanInstallments = loanInstallments;
|
||||||
|
SalaryAids = salaryAids;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string EmployeeFullName { get; private set; }
|
public string EmployeeFullName { get; private set; }
|
||||||
@@ -181,7 +191,15 @@ public class Checkout : EntityBase
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string TotalDayOfBunosesCompute { get; private set; }
|
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 WorkingHours WorkingHours { get; set; }
|
||||||
|
|
||||||
public void Edit(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth,
|
public void Edit(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth,
|
||||||
@@ -278,4 +296,16 @@ public class Checkout : EntityBase
|
|||||||
this.TotalDeductions = totalDeductions;
|
this.TotalDeductions = totalDeductions;
|
||||||
this.TotalPayment = totalPayment;
|
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>
|
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);
|
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);
|
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>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
@@ -14,4 +14,8 @@
|
|||||||
<ProjectReference Include="..\CompanyManagment.App.Contracts\CompanyManagment.App.Contracts.csproj" />
|
<ProjectReference Include="..\CompanyManagment.App.Contracts\CompanyManagment.App.Contracts.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="CheckoutAgg\ValueObjects\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
26
Company.Domain/ContactUsAgg/ContactUs.cs
Normal file
26
Company.Domain/ContactUsAgg/ContactUs.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using _0_Framework.Domain;
|
||||||
|
|
||||||
|
namespace Company.Domain.ContactUsAgg;
|
||||||
|
|
||||||
|
public class ContactUs:EntityBase
|
||||||
|
{
|
||||||
|
public ContactUs(string firstName, string lastName, string email, string phoneNumber, string title, string message)
|
||||||
|
{
|
||||||
|
FirstName = firstName.Trim();
|
||||||
|
LastName = lastName.Trim();
|
||||||
|
Email = email;
|
||||||
|
PhoneNumber = phoneNumber;
|
||||||
|
Title = title;
|
||||||
|
Message = message;
|
||||||
|
FullName = FirstName + " " + LastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FirstName { get; private set; }
|
||||||
|
public string LastName { get; private set; }
|
||||||
|
public string Email { get; private set; }
|
||||||
|
public string PhoneNumber { get; private set; }
|
||||||
|
public string Title { get; private set; }
|
||||||
|
public string Message { get; private set; }
|
||||||
|
public string FullName { get; private set; }
|
||||||
|
|
||||||
|
}
|
||||||
8
Company.Domain/ContactUsAgg/IContactUsRepository.cs
Normal file
8
Company.Domain/ContactUsAgg/IContactUsRepository.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using _0_Framework.Domain;
|
||||||
|
|
||||||
|
namespace Company.Domain.ContactUsAgg;
|
||||||
|
|
||||||
|
public interface IContactUsRepository : IRepository<long, ContactUs>
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using AccountManagement.Application.Contracts.Account;
|
using AccountManagement.Application.Contracts.Account;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Company.Domain.ContarctingPartyAgg;
|
namespace Company.Domain.ContarctingPartyAgg;
|
||||||
|
|
||||||
@@ -42,6 +43,34 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست طرف حساب ها
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<ICollection<ContractingPartyGetListViewModel>> GetList(ContractingPartyGetListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست طرف حساب برای سلکت لیست سرچ
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<ContractingPartySelectListViewModel>> GetSelectList();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیستی از شماره ملی یا شناسه ملی بر اساس حقیقی یا حقوقی بودن
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<GetContractingPartyNationalCodeOrNationalIdViewModel>> GetNationalCodeOrNationalId();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// غیرفعال کردن طرف حساب و زیرمجموعه های آن
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult<string>> DeactivateWithSubordinates(long id);
|
||||||
|
|
||||||
|
void Remove(PersonalContractingParty entity);
|
||||||
|
Task<GetRealContractingPartyDetailsViewModel> GetRealDetails(long id);
|
||||||
|
Task<GetLegalContractingPartyDetailsViewModel> GetLegalDetails(long id);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||||
@@ -18,20 +19,20 @@ public class CustomizeCheckout : EntityBase
|
|||||||
private CustomizeCheckout()
|
private CustomizeCheckout()
|
||||||
{ }
|
{ }
|
||||||
public CustomizeCheckout(DateTime contractStart, DateTime contractEnd, long employeeId, string employeeFName,
|
public CustomizeCheckout(DateTime contractStart, DateTime contractEnd, long employeeId, string employeeFName,
|
||||||
string employeeLName, DateTime employeeDateOfBirth,
|
string employeeLName, DateTime employeeDateOfBirth,
|
||||||
string employeeNationalCode, string workshopFullName, long workshopId, long? contractId,
|
string employeeNationalCode, string workshopFullName, long workshopId, long? contractId,
|
||||||
double monthlySalary, double fridayPay, double overTimePay, double baseYearsPay, double bonusesPay,
|
double monthlySalary, double fridayPay, double overTimePay, double baseYearsPay, double bonusesPay,
|
||||||
double nightWorkPay,
|
double nightWorkPay,
|
||||||
double marriedAllowance, double shiftPay, double familyAllowance, double leavePay, double insuranceDeduction,
|
double marriedAllowance, double shiftPay, double familyAllowance, double leavePay, double insuranceDeduction,
|
||||||
double fineAbsenceDeduction,
|
double fineAbsenceDeduction,
|
||||||
double lateToWorkDeduction, double earlyExitDeduction, double rewardPay, double salaryAidDeduction,
|
double lateToWorkDeduction, double earlyExitDeduction, double rewardPay, double salaryAidDeduction,
|
||||||
double installmentDeduction,
|
double installmentDeduction,
|
||||||
double fineDeduction, double taxDeduction, string sumOfWorkingDays, string totalClaims, string totalDeductions,
|
double fineDeduction, double taxDeduction, string sumOfWorkingDays, string totalClaims, string totalDeductions,
|
||||||
double totalPayment, string contractNo, ICollection<CustomizeCheckoutFine> checkoutFines,
|
double totalPayment, string contractNo, ICollection<CustomizeCheckoutFine> checkoutFines,
|
||||||
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
|
ICollection<CustomizeCheckoutLoanInstallments> customizeCheckoutLoanInstallments,
|
||||||
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
|
ICollection<CustomizeCheckoutSalaryAid> customizeCheckoutSalaryAids,
|
||||||
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards, TimeSpan lateToWorkValue, double settingSalary,
|
ICollection<CustomizeCheckoutReward> customizeCheckoutRewards, TimeSpan lateToWorkValue, double settingSalary,
|
||||||
double dailyWage, WorkshopShiftStatus shiftStatus, IrregularShift irregularShift,
|
double dailyWage, WorkshopShiftStatus shiftStatus, IrregularShift irregularShift,
|
||||||
ICollection<CustomizeRotatingShift> customizeRotatingShifts, ICollection<CustomizeCheckoutRegularShift> employeeSettingsShifts)
|
ICollection<CustomizeRotatingShift> customizeRotatingShifts, ICollection<CustomizeCheckoutRegularShift> employeeSettingsShifts)
|
||||||
{
|
{
|
||||||
YearInt = Convert.ToInt32(contractStart.ToFarsi().Substring(0, 4));
|
YearInt = Convert.ToInt32(contractStart.ToFarsi().Substring(0, 4));
|
||||||
@@ -77,8 +78,8 @@ public class CustomizeCheckout : EntityBase
|
|||||||
|
|
||||||
LateToWorkValue = lateToWorkValue;
|
LateToWorkValue = lateToWorkValue;
|
||||||
SettingSalary = settingSalary;
|
SettingSalary = settingSalary;
|
||||||
DailyWage = dailyWage;
|
DailyWage = dailyWage;
|
||||||
ShiftStatus = shiftStatus;
|
ShiftStatus = shiftStatus;
|
||||||
IrregularShift = irregularShift;
|
IrregularShift = irregularShift;
|
||||||
CustomizeRotatingShifts = customizeRotatingShifts;
|
CustomizeRotatingShifts = customizeRotatingShifts;
|
||||||
RegularShifts = employeeSettingsShifts;
|
RegularShifts = employeeSettingsShifts;
|
||||||
@@ -257,17 +258,17 @@ public class CustomizeCheckout : EntityBase
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public double TotalPayment { get; private set; }
|
public double TotalPayment { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// مزد روزانه
|
/// مزد روزانه
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double DailyWage { get; private set; }
|
public double DailyWage { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// حقوق تعیین شده
|
/// حقوق تعیین شده
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double SettingSalary { get; private set; }
|
public double SettingSalary { get; private set; }
|
||||||
|
|
||||||
public WorkshopShiftStatus ShiftStatus { get; set; }
|
public WorkshopShiftStatus ShiftStatus { get; set; }
|
||||||
|
|
||||||
|
|
||||||
#region Values
|
#region Values
|
||||||
@@ -301,4 +302,78 @@ public class CustomizeCheckout : EntityBase
|
|||||||
|
|
||||||
#endregion
|
#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,7 +3,7 @@ using _0_Framework.Domain;
|
|||||||
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Application;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Company.Domain.CustomizeCheckoutAgg
|
namespace Company.Domain.CustomizeCheckoutAgg
|
||||||
{
|
{
|
||||||
@@ -15,5 +15,12 @@ namespace Company.Domain.CustomizeCheckoutAgg
|
|||||||
void RemoveEmployeeCustomizeCheckoutInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
void RemoveEmployeeCustomizeCheckoutInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
||||||
IEnumerable<CustomizeCheckout> GetRange(long workshopId, List<long> ids);
|
IEnumerable<CustomizeCheckout> GetRange(long workshopId, List<long> ids);
|
||||||
void RemoveRange(IEnumerable<CustomizeCheckout> entities);
|
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 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;
|
Title = title;
|
||||||
Amount = amount;
|
Amount = amount;
|
||||||
@@ -13,6 +13,7 @@ public record CustomizeCheckoutFine
|
|||||||
FineDateGr = fineDateGr;
|
FineDateGr = fineDateGr;
|
||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
CreationDate = creationDate;
|
CreationDate = creationDate;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Title { get; private set; }
|
public string Title { get; private set; }
|
||||||
@@ -21,4 +22,5 @@ public record CustomizeCheckoutFine
|
|||||||
public DateTime FineDateGr { get; private set; }
|
public DateTime FineDateGr { get; private set; }
|
||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
public DateTime CreationDate { 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 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;
|
AmountForMonth = amountForMonth;
|
||||||
Month = month;
|
Month = month;
|
||||||
@@ -13,6 +13,7 @@ public class CustomizeCheckoutLoanInstallments
|
|||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
LoanRemaining = loanRemaining;
|
LoanRemaining = loanRemaining;
|
||||||
LoanAmount = loanAmount;
|
LoanAmount = loanAmount;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AmountForMonth { get; private set; }
|
public string AmountForMonth { get; private set; }
|
||||||
@@ -21,5 +22,7 @@ public class CustomizeCheckoutLoanInstallments
|
|||||||
public string LoanRemaining { get; set; }
|
public string LoanRemaining { get; set; }
|
||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
public string LoanAmount { get; set; }
|
public string LoanAmount { get; set; }
|
||||||
|
public long EntityId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
|||||||
|
|
||||||
public class CustomizeCheckoutReward
|
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;
|
Amount = amount;
|
||||||
Description = description;
|
Description = description;
|
||||||
@@ -13,6 +13,7 @@ public class CustomizeCheckoutReward
|
|||||||
GrantDateFa = grantDateFa;
|
GrantDateFa = grantDateFa;
|
||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
Title = title;
|
Title = title;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -39,5 +40,7 @@ public class CustomizeCheckoutReward
|
|||||||
|
|
||||||
|
|
||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
|
public long EntityId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,14 +4,23 @@ namespace Company.Domain.CustomizeCheckoutAgg.ValueObjects;
|
|||||||
|
|
||||||
public class CustomizeCheckoutSalaryAid
|
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;
|
Amount = amount;
|
||||||
SalaryAidDateTime = salaryAidDateTime;
|
SalaryAidDateTime = salaryAidDateTime;
|
||||||
SalaryAidDateTimeFa = salaryAidDateTimeFa;
|
SalaryAidDateTimeFa = salaryAidDateTimeFa;
|
||||||
|
CalculationDateTime = calculationDateTime;
|
||||||
|
CalculationDateTimeFa = calculationDateTimeFa;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Amount { get; private set; }
|
public string Amount { get; private set; }
|
||||||
public DateTime SalaryAidDateTime { get; private set; }
|
public DateTime SalaryAidDateTime { get; private set; }
|
||||||
public string SalaryAidDateTimeFa { 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; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,7 @@ using System.Collections.Generic;
|
|||||||
using Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
|
using Company.Domain.CustomizeCheckoutTempAgg.ValueObjects;
|
||||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||||
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
|
||||||
namespace Company.Domain.CustomizeCheckoutTempAgg;
|
namespace Company.Domain.CustomizeCheckoutTempAgg;
|
||||||
@@ -303,6 +304,77 @@ public class CustomizeCheckoutTemp : EntityBase
|
|||||||
public Workshop Workshop { get; set; }
|
public Workshop Workshop { get; set; }
|
||||||
public Employee Employee { 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 CompanyManagment.App.Contracts.CustomizeCheckout;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Company.Domain.CustomizeCheckoutTempAgg
|
namespace Company.Domain.CustomizeCheckoutTempAgg
|
||||||
{
|
{
|
||||||
@@ -19,5 +20,7 @@ namespace Company.Domain.CustomizeCheckoutTempAgg
|
|||||||
|
|
||||||
IEnumerable<CustomizeCheckoutTemp> GetRange(long workshopId, List<long> ids);
|
IEnumerable<CustomizeCheckoutTemp> GetRange(long workshopId, List<long> ids);
|
||||||
void RemoveRange(IEnumerable<CustomizeCheckoutTemp> entities);
|
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 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;
|
Amount = amount;
|
||||||
SalaryAidDateTime = salaryAidDateTime;
|
SalaryAidDateTime = salaryAidDateTime;
|
||||||
SalaryAidDateTimeFa = salaryAidDateTimeFa;
|
SalaryAidDateTimeFa = salaryAidDateTimeFa;
|
||||||
|
CalculationDateTime = calculationDateTime;
|
||||||
|
CalculationDateTimeFa = calculationDateTimeFa;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Amount { get; private set; }
|
public string Amount { get; private set; }
|
||||||
public DateTime SalaryAidDateTime { get; private set; }
|
public DateTime SalaryAidDateTime { get; private set; }
|
||||||
public string SalaryAidDateTimeFa { 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 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;
|
Title = title;
|
||||||
Amount = amount;
|
Amount = amount;
|
||||||
@@ -14,7 +14,7 @@ public record CustomizeCheckoutTempFine
|
|||||||
FineDateGr = fineDateGr;
|
FineDateGr = fineDateGr;
|
||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
CreationDate = creationDate;
|
CreationDate = creationDate;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
public string Title { get; private set; }
|
public string Title { get; private set; }
|
||||||
public string Amount { get; private set; }
|
public string Amount { get; private set; }
|
||||||
@@ -22,4 +22,6 @@ public record CustomizeCheckoutTempFine
|
|||||||
public DateTime FineDateGr { get; private set; }
|
public DateTime FineDateGr { get; private set; }
|
||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
public DateTime CreationDate { 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 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;
|
AmountForMonth = amountForMonth;
|
||||||
Month = month;
|
Month = month;
|
||||||
@@ -12,6 +12,7 @@ public class CustomizeCheckoutTempLoanInstallments
|
|||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
LoanRemaining = loanRemaining;
|
LoanRemaining = loanRemaining;
|
||||||
LoanAmount = loanAmount;
|
LoanAmount = loanAmount;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AmountForMonth { get; private set; }
|
public string AmountForMonth { get; private set; }
|
||||||
@@ -20,5 +21,7 @@ public class CustomizeCheckoutTempLoanInstallments
|
|||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
public string LoanRemaining { get; set; }
|
public string LoanRemaining { get; set; }
|
||||||
public string LoanAmount { 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 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;
|
Amount = amount;
|
||||||
Description = description;
|
Description = description;
|
||||||
@@ -13,6 +13,7 @@ public class CustomizeCheckoutTempReward
|
|||||||
GrantDateFa = grantDateFa;
|
GrantDateFa = grantDateFa;
|
||||||
IsActive = isActive;
|
IsActive = isActive;
|
||||||
Title = title;
|
Title = title;
|
||||||
|
EntityId = entityId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -37,4 +38,6 @@ public class CustomizeCheckoutTempReward
|
|||||||
|
|
||||||
public IsActive IsActive { get; private set; }
|
public IsActive IsActive { get; private set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
|
public long EntityId { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -214,5 +214,66 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
|
|||||||
.ToList(), earlyExit.Value);
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SetSalary(double salary)
|
||||||
|
{
|
||||||
|
Salary = salary;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,4 +15,5 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository<long
|
|||||||
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
|
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
|
||||||
void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId);
|
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)
|
foreach (var item in permittedToOverWrite)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ public class Employee : EntityBase
|
|||||||
{
|
{
|
||||||
public Employee(string fName, string lName, string fatherName,
|
public Employee(string fName, string lName, string fatherName,
|
||||||
DateTime dateOfBirth, DateTime dateOfIssue, string placeOfIssue,
|
DateTime dateOfBirth, DateTime dateOfIssue, string placeOfIssue,
|
||||||
string nationalCode, string idNumber, string gender, string nationality,
|
string nationalCode, string idNumber, string gender, string nationality, string idNumberSerial , string idNumberSeri ,
|
||||||
string phone = null, string address = null, string state = null, string city = null,
|
string phone = null, string address = null, string state = null, string city = null,
|
||||||
string maritalStatus = null, string militaryService = null, string levelOfEducation = null, string fieldOfStudy = 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 bankCardNumber = null, string bankBranch = null, string insuranceCode = null, string insuranceHistoryByYear = null,
|
||||||
string insuranceHistoryByMonth = null, string numberOfChildren = null, string officePhone = null,
|
string insuranceHistoryByMonth = null, string numberOfChildren = null, string officePhone = null,
|
||||||
string mclsUserName = null, string mclsPassword = null,
|
string mclsUserName = null, string mclsPassword = null,
|
||||||
string eserviceUserName = null, string eservicePassword = null,
|
string eserviceUserName = null, string eservicePassword = null,
|
||||||
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null)
|
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null )
|
||||||
{
|
{
|
||||||
FName = fName;
|
FName = fName;
|
||||||
LName = lName;
|
LName = lName;
|
||||||
@@ -146,6 +146,15 @@ public class Employee : EntityBase
|
|||||||
/// آیا پرسنل احراز هویت شده است
|
/// آیا پرسنل احراز هویت شده است
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsAuthorized { get; set; }
|
public bool IsAuthorized { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// سریال شناسنامه
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumberSerial { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سری شناسنامه
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumberSeri { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -234,5 +243,39 @@ public class Employee : EntityBase
|
|||||||
IsAuthorized = true;
|
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
|
#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);
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
using _0_Framework.Domain;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.EmployeeClientTemp;
|
using CompanyManagment.App.Contracts.EmployeeClientTemp;
|
||||||
|
|
||||||
namespace Company.Domain.EmployeeClientTempAgg;
|
namespace Company.Domain.EmployeeClientTempAgg;
|
||||||
@@ -8,4 +10,5 @@ public interface IEmployeeClientTempRepository : IRepository<long, EmployeeClien
|
|||||||
EmployeeClientTemp GetByEmployeeIdAndWorkshopId(long employeeId, long commandWorkshopId);
|
EmployeeClientTemp GetByEmployeeIdAndWorkshopId(long employeeId, long commandWorkshopId);
|
||||||
EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
|
EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
|
||||||
void Remove(EmployeeClientTemp entity);
|
void Remove(EmployeeClientTemp entity);
|
||||||
|
Task<List<EmployeeClientTempViewModel>> GetByEmployeeId(long employeeId);
|
||||||
}
|
}
|
||||||
@@ -7,100 +7,105 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using Microsoft.AspNetCore.JsonPatch.Operations;
|
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)
|
||||||
{
|
{
|
||||||
|
MediaId = mediaId;
|
||||||
public long WorkshopId { get; private set; }
|
UploaderId = uploaderId;
|
||||||
public long EmployeeId { get; private set; }
|
UploaderType = uploaderType;
|
||||||
|
UploaderRoleId = uploaderType == UserType.Admin ? roleId : -1;
|
||||||
public long UploaderId { get; private set; }
|
EmployeeId = employeeId;
|
||||||
public UserType UploaderType { get; private set; }
|
WorkshopId = workshopId;
|
||||||
|
DocumentStatus = documentStatus;
|
||||||
|
if (documentStatus == DocumentStatus.Confirmed)
|
||||||
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;
|
|
||||||
ConfirmationDateTime = DateTime.Now;
|
ConfirmationDateTime = DateTime.Now;
|
||||||
ItemLogs.Add(new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.ConfirmedItem, operatorId, userType));
|
DocumentLabel = documentLabel;
|
||||||
}
|
EmployeeDocumentId = employeeDocumentId;
|
||||||
|
ItemLogs =
|
||||||
public void Reject(long operatorId, string rejectionReason, UserType userType)
|
[
|
||||||
{
|
new EmployeeDocumentItemLog(EmployeeDocumentItemOperation.CreatedNewItem, uploaderId, uploaderType)
|
||||||
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 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 =
|
List<DocumentItemLabel> requiredDocuments =
|
||||||
[
|
[
|
||||||
DocumentItemLabel.IdCardPage1, DocumentItemLabel.IdCardPage2, DocumentItemLabel.IdCardPage3, DocumentItemLabel.NationalCardRear,
|
DocumentItemLabel.IdCardPage1,/* DocumentItemLabel.IdCardPage2, DocumentItemLabel.IdCardPage3, DocumentItemLabel.NationalCardRear,*/
|
||||||
DocumentItemLabel.NationalCardFront,DocumentItemLabel.EmployeePicture
|
DocumentItemLabel.NationalCardFront,/*DocumentItemLabel.EmployeePicture*/
|
||||||
];
|
];
|
||||||
|
|
||||||
if (gender == "مرد")
|
//if (gender == "مرد")
|
||||||
requiredDocuments.Add(DocumentItemLabel.MilitaryServiceCard);
|
// requiredDocuments.Add(DocumentItemLabel.MilitaryServiceCard);
|
||||||
|
|
||||||
return requiredDocuments;
|
return requiredDocuments;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using CompanyManagment.App.Contracts.Workshop;
|
|||||||
namespace Company.Domain.EmployeeDocumentsAgg
|
namespace Company.Domain.EmployeeDocumentsAgg
|
||||||
{
|
{
|
||||||
public interface IEmployeeDocumentsRepository : IRepository<long, EmployeeDocuments>
|
public interface IEmployeeDocumentsRepository : IRepository<long, EmployeeDocuments>
|
||||||
{
|
{
|
||||||
EmployeeDocuments GetByEmployeeIdWorkshopId(long employeeId, long workshopId);
|
EmployeeDocuments GetByEmployeeIdWorkshopId(long employeeId, long workshopId);
|
||||||
EmployeeDocumentsViewModel GetViewModelByEmployeeIdWorkshopId(long employeeId, long workshopId);
|
EmployeeDocumentsViewModel GetViewModelByEmployeeIdWorkshopId(long employeeId, long workshopId);
|
||||||
List<EmployeeDocumentsViewModel> SearchForClient(SearchEmployeeDocuments cmd);
|
List<EmployeeDocumentsViewModel> SearchForClient(SearchEmployeeDocuments cmd);
|
||||||
@@ -30,5 +30,76 @@ namespace Company.Domain.EmployeeDocumentsAgg
|
|||||||
Task<int> GetAdminWorkFlowCountForNewEmployees(List<long> workshopIds);
|
Task<int> GetAdminWorkFlowCountForNewEmployees(List<long> workshopIds);
|
||||||
Task<int> GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List<long> workshopIds);
|
Task<int> GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List<long> workshopIds);
|
||||||
List<EmployeeDocumentsViewModel> GetDocumentsAwaitingReviewByWorkshopIdForCheckerWorkFlow(long workshopId);
|
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,
|
public EmployeeInsurancListData(long insuranceListId, long employeeId, int workingDays, double dailyWage, double monthlySalary,
|
||||||
double monthlyBenefits, double monthlyBenefitsIncluded, double benefitsIncludedContinuous, double benefitsIncludedNonContinuous,
|
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;
|
InsuranceListId = insuranceListId;
|
||||||
EmployeeId = employeeId;
|
EmployeeId = employeeId;
|
||||||
@@ -30,6 +30,8 @@ public class EmployeeInsurancListData : EntityBase
|
|||||||
IncludeStatus = includeStatus;
|
IncludeStatus = includeStatus;
|
||||||
BaseYears = baseYears;
|
BaseYears = baseYears;
|
||||||
MarriedAllowance = marriedAllowance;
|
MarriedAllowance = marriedAllowance;
|
||||||
|
OverTimePay = overTimePay;
|
||||||
|
FamilyAllowance = familyAllowance;
|
||||||
DailyWagePlusBaseYears = dailyWage + baseYears;
|
DailyWagePlusBaseYears = dailyWage + baseYears;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,10 +112,20 @@ public class EmployeeInsurancListData : EntityBase
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public double MarriedAllowance { get; private set; }
|
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,
|
public void Edit(int workingDays, double dailyWage, double monthlySalary, double monthlyBenefits, double monthlyBenefitsIncluded,
|
||||||
double benefitsIncludedContinuous, double benefitsIncludedNonContinuous, double insuranceShare, DateTime startWorkDate,
|
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;
|
WorkingDays = workingDays;
|
||||||
@@ -130,6 +142,8 @@ public class EmployeeInsurancListData : EntityBase
|
|||||||
IncludeStatus= includeStatus;
|
IncludeStatus= includeStatus;
|
||||||
BaseYears = baseYears;
|
BaseYears = baseYears;
|
||||||
MarriedAllowance = marriedAllowance;
|
MarriedAllowance = marriedAllowance;
|
||||||
|
OverTimePay = overTimePay;
|
||||||
|
FamilyAllowance = familyAllowance;
|
||||||
DailyWagePlusBaseYears = dailyWage + baseYears;
|
DailyWagePlusBaseYears = dailyWage + baseYears;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
|||||||
|
|
||||||
double GetcontractAmount(int countPerson);
|
double GetcontractAmount(int countPerson);
|
||||||
|
|
||||||
string ExpColor(DateTime contractEndGr, double contractAmount,
|
(string result, string isExpier) ExpColor(DateTime contractEndGr, double contractAmount,
|
||||||
string isActiveString);
|
string isActiveString);
|
||||||
|
|
||||||
TotalbalancViewModel TotalBalance(long contractingPartyId);
|
TotalbalancViewModel TotalBalance(long contractingPartyId);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.InsuranceJob;
|
using CompanyManagment.App.Contracts.InsuranceJob;
|
||||||
|
using CompanyManagment.App.Contracts.InsuranceJobItem;
|
||||||
|
|
||||||
namespace Company.Domain.InsurancJobAgg;
|
namespace Company.Domain.InsurancJobAgg;
|
||||||
|
|
||||||
@@ -13,10 +14,16 @@ public interface IInsuranceJobRepositpry:IRepository<long, InsuranceJob>
|
|||||||
{
|
{
|
||||||
//OperationResult Create(CreateInsurancJob command);
|
//OperationResult Create(CreateInsurancJob command);
|
||||||
// OperationResult Edit(EditInsurancJob command);
|
// OperationResult Edit(EditInsurancJob command);
|
||||||
EditInsuranceJob GetDetails(long id);
|
EditInsuranceJob GetDetails(long id, string year, string month);
|
||||||
List<InsuranceJobViewModel> GetInsurancJob();
|
List<InsuranceJobViewModel> GetInsurancJob();
|
||||||
List<InsuranceJobViewModel> Search(InsuranceJobSearchModel searchModel);
|
List<InsuranceJobViewModel> Search(InsuranceJobSearchModel searchModel);
|
||||||
OperationResult CreateInsuranceJob(CreateInsuranceJob command);
|
OperationResult CreateInsuranceJob(CreateInsuranceJob command);
|
||||||
|
List<(long id, string date)> GetOldYersInsuranceItemIds();
|
||||||
|
OperationResult CopyFromLastYear(CopyFromLastYearViewModel command);
|
||||||
|
OperationResult RecoveryOldData1403();
|
||||||
OperationResult Remove(long id);
|
OperationResult Remove(long id);
|
||||||
OperationResult EditInsuranceJob(EditInsuranceJob command);
|
OperationResult EditInsuranceJob(EditInsuranceJob command);
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,11 @@ public interface IInsuranceJobItemRepositpry : IRepository<long, InsuranceJobIte
|
|||||||
{
|
{
|
||||||
void CreateInsuranceJobItem(InsuranceJobItemViewModel model);
|
void CreateInsuranceJobItem(InsuranceJobItemViewModel model);
|
||||||
DetailsInsuranceJobItem GetDetails(long id);
|
DetailsInsuranceJobItem GetDetails(long id);
|
||||||
List<InsuranceJobItemViewModel> GetInsuranceJobItemByInsuranceJobId(long Id);
|
List<InsuranceJobItemViewModel> GetInsuranceJobItemByInsuranceJobId(long Id, string year, string month);
|
||||||
List<InsuranceJobItemViewModel> Search(InsuranceJobItemSearchModel searchModel);
|
List<InsuranceJobItemViewModel> Search(InsuranceJobItemSearchModel searchModel);
|
||||||
InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId);
|
InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId,
|
||||||
|
string year, string month);
|
||||||
|
|
||||||
|
(List<string> workshopList, bool hasAnyWorkshop) GetWorkshopUsedThisInsuranceJob(long insuranceJobId);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using Company.Domain.InsuranceJobAndJobsAgg;
|
using Company.Domain.InsuranceJobAndJobsAgg;
|
||||||
using Company.Domain.InsurancJobAgg;
|
using Company.Domain.InsurancJobAgg;
|
||||||
@@ -8,13 +9,15 @@ namespace Company.Domain.InsuranceJobItemAgg;
|
|||||||
|
|
||||||
public class InsuranceJobItem : EntityBase
|
public class InsuranceJobItem : EntityBase
|
||||||
{
|
{
|
||||||
public InsuranceJobItem(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId)
|
public InsuranceJobItem(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId, DateTime? startDate, DateTime? endDate)
|
||||||
{
|
{
|
||||||
PercentageLessThan = percentageLessThan;
|
PercentageLessThan = percentageLessThan;
|
||||||
SalaeyLessThan = salaeyLessThan;
|
SalaeyLessThan = salaeyLessThan;
|
||||||
PercentageMoreThan = percentageMoreThan;
|
PercentageMoreThan = percentageMoreThan;
|
||||||
SalaryMoreThan = salaryMoreThan;
|
SalaryMoreThan = salaryMoreThan;
|
||||||
InsuranceJobId = insuranceJobId;
|
InsuranceJobId = insuranceJobId;
|
||||||
|
StartDate = startDate;
|
||||||
|
EndDate = endDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double PercentageLessThan { get; private set; }
|
public double PercentageLessThan { get; private set; }
|
||||||
@@ -22,6 +25,9 @@ public class InsuranceJobItem : EntityBase
|
|||||||
public double PercentageMoreThan { get; private set; }
|
public double PercentageMoreThan { get; private set; }
|
||||||
public double SalaryMoreThan { get; private set; }
|
public double SalaryMoreThan { get; private set; }
|
||||||
|
|
||||||
|
public DateTime? StartDate { get; private set; }
|
||||||
|
public DateTime? EndDate { get; private set; }
|
||||||
|
|
||||||
public long InsuranceJobId { get; private set; }
|
public long InsuranceJobId { get; private set; }
|
||||||
public InsuranceJob InsuranceJob { get; set; }
|
public InsuranceJob InsuranceJob { get; set; }
|
||||||
public List<InsuranceJobAndJobs> InsuranceJobAndJobs { get; set; }
|
public List<InsuranceJobAndJobs> InsuranceJobAndJobs { get; set; }
|
||||||
@@ -31,12 +37,14 @@ public class InsuranceJobItem : EntityBase
|
|||||||
InsuranceJobAndJobs = new List<InsuranceJobAndJobs>();
|
InsuranceJobAndJobs = new List<InsuranceJobAndJobs>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId)
|
public void Edit(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId, DateTime? startDate, DateTime? endDate)
|
||||||
{
|
{
|
||||||
PercentageLessThan = percentageLessThan;
|
PercentageLessThan = percentageLessThan;
|
||||||
SalaeyLessThan = salaeyLessThan;
|
SalaeyLessThan = salaeyLessThan;
|
||||||
PercentageMoreThan = percentageMoreThan;
|
PercentageMoreThan = percentageMoreThan;
|
||||||
SalaryMoreThan = salaryMoreThan;
|
SalaryMoreThan = salaryMoreThan;
|
||||||
InsuranceJobId = insuranceJobId;
|
InsuranceJobId = insuranceJobId;
|
||||||
|
StartDate = startDate;
|
||||||
|
EndDate = endDate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,4 +60,13 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
|
|||||||
#region client
|
#region client
|
||||||
List<InsuranceListViewModel> SearchForClient(InsuranceListSearchModel searchModel);
|
List<InsuranceListViewModel> SearchForClient(InsuranceListSearchModel searchModel);
|
||||||
#endregion
|
#endregion
|
||||||
}
|
|
||||||
|
#region Mahan
|
||||||
|
Task<InsuranceListConfirmOperation> GetInsuranceOperationDetails(long id);
|
||||||
|
|
||||||
|
Task<InsuranceListTabsCountViewModel> GetTabCounts(long accountId,int month,int year);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
|
using Company.Domain.InsuranceListAgg.ValueObjects;
|
||||||
using Company.Domain.InsuranceWorkshopAgg;
|
using Company.Domain.InsuranceWorkshopAgg;
|
||||||
|
using CompanyManagment.App.Contracts.InsuranceList.Enums;
|
||||||
|
|
||||||
namespace Company.Domain.InsuranceListAgg;
|
namespace Company.Domain.InsuranceListAgg;
|
||||||
|
|
||||||
@@ -151,6 +153,21 @@ public class InsuranceList : EntityBase
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public double SumOfMarriedAllowance { get; private set; }
|
public double SumOfMarriedAllowance { get; private set; }
|
||||||
|
|
||||||
|
#region Mahan
|
||||||
|
/// <summary>
|
||||||
|
/// بازرسی
|
||||||
|
/// </summary>
|
||||||
|
public InsuranceListInspection Inspection { get; set; } =new (InsuranceListInspectionType.None,DateTime.MinValue, 0);
|
||||||
|
/// <summary>
|
||||||
|
/// بدهی
|
||||||
|
/// </summary>
|
||||||
|
public InsuranceListDebt Debt { get; set; } = new(InsuranceListDebtType.None, DateTime.MinValue, 0, 0);
|
||||||
|
/// <summary>
|
||||||
|
/// تاییدیه کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public InsuranceListEmployerApproval EmployerApproval { get; set; } = new(InsuranceListEmployerApprovalStatus.None, string.Empty);
|
||||||
|
#endregion
|
||||||
|
|
||||||
public List<InsuranceListWorkshop> InsuranceListWorkshops { get; set; }
|
public List<InsuranceListWorkshop> InsuranceListWorkshops { get; set; }
|
||||||
|
|
||||||
public void Edit(int sumOfEmployees, int sumOfWorkingDays, double sumOfSalaries, double sumOfBenefitsIncluded, double included,
|
public void Edit(int sumOfEmployees, int sumOfWorkingDays, double sumOfSalaries, double sumOfBenefitsIncluded, double included,
|
||||||
@@ -174,4 +191,22 @@ public class InsuranceList : EntityBase
|
|||||||
SumOfDailyWagePlusBaseYears = sumOfDailyWage + sumOfBaseYears;
|
SumOfDailyWagePlusBaseYears = sumOfDailyWage + sumOfBaseYears;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
public void SetDebt(InsuranceListDebt debt)
|
||||||
|
{
|
||||||
|
Debt = debt;
|
||||||
|
}
|
||||||
|
public void SetInspection(InsuranceListInspection inspection)
|
||||||
|
{
|
||||||
|
Inspection = inspection;
|
||||||
|
}
|
||||||
|
public void SetEmployerApproval(InsuranceListEmployerApproval employerApproval)
|
||||||
|
{
|
||||||
|
EmployerApproval = employerApproval;
|
||||||
|
}
|
||||||
|
public void SetConfirmSentlist(bool confirmSentlist)
|
||||||
|
{
|
||||||
|
ConfirmSentlist = confirmSentlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using CompanyManagment.App.Contracts.InsuranceList.Enums;
|
||||||
|
|
||||||
|
namespace Company.Domain.InsuranceListAgg.ValueObjects;
|
||||||
|
|
||||||
|
public class InsuranceListDebt
|
||||||
|
{
|
||||||
|
public InsuranceListDebt(InsuranceListDebtType type, DateTime debtDate, double amount, long mediaId)
|
||||||
|
{
|
||||||
|
Type = type;
|
||||||
|
if (type == InsuranceListDebtType.None)
|
||||||
|
{
|
||||||
|
DebtDate = DateTime.MinValue;
|
||||||
|
Amount = 0;
|
||||||
|
MediaId = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DebtDate = debtDate;
|
||||||
|
Amount = amount;
|
||||||
|
MediaId = mediaId;
|
||||||
|
IsDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public InsuranceListDebtType Type { get; set; }
|
||||||
|
public DateTime DebtDate { get; set; }
|
||||||
|
public double Amount { get; set; }
|
||||||
|
public long MediaId { get; set; }
|
||||||
|
public bool IsDone { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using System.Security.Cryptography;
|
||||||
|
using CompanyManagment.App.Contracts.InsuranceList.Enums;
|
||||||
|
|
||||||
|
namespace Company.Domain.InsuranceListAgg.ValueObjects;
|
||||||
|
|
||||||
|
public class InsuranceListEmployerApproval
|
||||||
|
{
|
||||||
|
public InsuranceListEmployerApproval(InsuranceListEmployerApprovalStatus status, string description)
|
||||||
|
{
|
||||||
|
Status = status;
|
||||||
|
if (status == InsuranceListEmployerApprovalStatus.None)
|
||||||
|
{
|
||||||
|
Description = string.Empty;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
Description = description;
|
||||||
|
IsDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public InsuranceListEmployerApprovalStatus Status { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public bool IsDone { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using CompanyManagment.App.Contracts.InsuranceList.Enums;
|
||||||
|
|
||||||
|
namespace Company.Domain.InsuranceListAgg.ValueObjects;
|
||||||
|
|
||||||
|
public class InsuranceListInspection
|
||||||
|
{
|
||||||
|
public InsuranceListInspection(InsuranceListInspectionType type, DateTime lastInspectionDateTime, long mediaId)
|
||||||
|
{
|
||||||
|
Type = type;
|
||||||
|
if (type == InsuranceListInspectionType.None)
|
||||||
|
{
|
||||||
|
LastInspectionDateTime = DateTime.MinValue;
|
||||||
|
MediaId = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LastInspectionDateTime = lastInspectionDateTime;
|
||||||
|
MediaId = mediaId;
|
||||||
|
IsDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public InsuranceListInspectionType Type { get; set; }
|
||||||
|
public DateTime LastInspectionDateTime { get; set; }
|
||||||
|
public long MediaId { get; set; }
|
||||||
|
public bool IsDone { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -45,4 +45,5 @@ public interface ILeftWorkRepository : IRepository<long, LeftWork>
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<LeftWork> GetLastLeftWork(long employeeId, long workshopId);
|
Task<LeftWork> GetLastLeftWork(long employeeId, long workshopId);
|
||||||
|
List<LeftWorkViewModel> SearchCreateContract(LeftWorkSearchModel searchModel);
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.InsuranceList;
|
using CompanyManagment.App.Contracts.InsuranceList;
|
||||||
|
using CompanyManagment.App.Contracts.LeftWork;
|
||||||
using CompanyManagment.App.Contracts.LeftWorkInsurance;
|
using CompanyManagment.App.Contracts.LeftWorkInsurance;
|
||||||
using CompanyManagment.App.Contracts.PersonnleCode;
|
using CompanyManagment.App.Contracts.PersonnleCode;
|
||||||
|
|
||||||
@@ -40,5 +41,19 @@ public interface ILeftWorkInsuranceRepository : IRepository<long, LeftWorkInsura
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<EmployeeDetailsForInsuranceListViewModel> GetEmployeeInsuranceLeftWorksAndInformation(long workshopId, DateTime startDate, DateTime endDate);
|
List<EmployeeDetailsForInsuranceListViewModel> GetEmployeeInsuranceLeftWorksAndInformation(long workshopId, DateTime startDate, DateTime endDate);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Mahan
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرسنل هایی که در قرارداد ترک کار دارند ولی در بیمه ترک کاری برایشان نخورده
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
List<LeftWorkViewModel> GetEmployeesWithContractExitOnly(long workshopId);
|
||||||
|
|
||||||
|
LeftWorkInsurance GetLastLeftWorkByEmployeeIdAndWorkshopId(long workshopId, long employeeId);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,4 +16,5 @@ public interface ILeftWorkTempRepository:IRepository<long,LeftWorkTemp>
|
|||||||
Task<GetStartWorkTempDetails> GetStartAndLeftWorkDetails(long employeeId, long workshopId);
|
Task<GetStartWorkTempDetails> GetStartAndLeftWorkDetails(long employeeId, long workshopId);
|
||||||
void Remove(LeftWorkTemp entity);
|
void Remove(LeftWorkTemp entity);
|
||||||
List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId);
|
List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId);
|
||||||
|
Task<List<LeftWorkTempViewModel>> GetLeftWorkTempsByEmployeeId(long employeeId);
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,7 @@ using System.Threading.Tasks;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using OfficeOpenXml;
|
using OfficeOpenXml;
|
||||||
using OfficeOpenXml.Drawing.Chart;
|
using OfficeOpenXml.Drawing.Chart;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
namespace Company.Domain.RollCallAgg.DomainService;
|
namespace Company.Domain.RollCallAgg.DomainService;
|
||||||
|
|
||||||
@@ -25,11 +26,15 @@ public interface IRollCallDomainService
|
|||||||
long workshopId);
|
long workshopId);
|
||||||
|
|
||||||
TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId);
|
TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId);
|
||||||
DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate,DateTime rollCallEndDate);
|
DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate, DateTime rollCallEndDate);
|
||||||
|
|
||||||
void CalculateTimeDifferences(RollCall rollCall);
|
void CalculateTimeDifferences(RollCall rollCall);
|
||||||
|
|
||||||
(DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts);
|
(DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts);
|
||||||
|
(DateTime start, DateTime end) FindRotatingShift(List<(DateTime StartDate, DateTime EndDate)> rollcalls, ICollection<CustomizeRotatingShift> rotatingShifts);
|
||||||
|
|
||||||
|
BreakTime GetBreakTime(long employeeId, long workshopId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RollCallDomainService : IRollCallDomainService
|
public class RollCallDomainService : IRollCallDomainService
|
||||||
@@ -173,16 +178,16 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId,
|
public DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId,
|
||||||
DateTime rollCallStartDate,DateTime rollCallEndDate)
|
DateTime rollCallStartDate, DateTime rollCallEndDate)
|
||||||
{
|
{
|
||||||
var shiftDetails = GetEmployeeShiftDetails(employeeId, workshopId);
|
var shiftDetails = GetEmployeeShiftDetails(employeeId, workshopId);
|
||||||
|
|
||||||
var offset = GetEmployeeOffSetForRegularSettings(employeeId, workshopId);
|
var offset = GetEmployeeOffSetForRegularSettings(employeeId, workshopId);
|
||||||
|
|
||||||
return shiftDetails.shiftType switch
|
return shiftDetails.shiftType switch
|
||||||
{
|
{
|
||||||
WorkshopShiftStatus.Regular => CalculateRegularShiftDate(rollCallStartDate, offset),
|
WorkshopShiftStatus.Regular => CalculateRegularShiftDate(rollCallStartDate, offset),
|
||||||
WorkshopShiftStatus.Rotating => FindRotatingShift(rollCallEndDate,rollCallEndDate,shiftDetails.rotatingShifts).start.Date,
|
WorkshopShiftStatus.Rotating => FindRotatingShift(rollCallStartDate, rollCallEndDate, shiftDetails.rotatingShifts).start.Date,
|
||||||
WorkshopShiftStatus.Irregular => rollCallStartDate.Date,
|
WorkshopShiftStatus.Irregular => rollCallStartDate.Date,
|
||||||
_ => throw new ArgumentOutOfRangeException()
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
};
|
};
|
||||||
@@ -216,6 +221,7 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
rollCalls.Remove(deletedRollCall);
|
rollCalls.Remove(deletedRollCall);
|
||||||
rollCalls.Add(rollCall);
|
rollCalls.Add(rollCall);
|
||||||
|
|
||||||
|
rollCall.ClearTimeDiff();
|
||||||
switch (shiftDetails.shiftType)
|
switch (shiftDetails.shiftType)
|
||||||
{
|
{
|
||||||
case WorkshopShiftStatus.Regular:
|
case WorkshopShiftStatus.Regular:
|
||||||
@@ -256,7 +262,8 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
|
|
||||||
var lateEntryRollCall = rollCallsInShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > employeeShift.start);
|
var lateEntryRollCall = rollCallsInShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > employeeShift.start);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var previousShift = employeeShifts.OrderByDescending(x => x.start)
|
var previousShift = employeeShifts.OrderByDescending(x => x.start)
|
||||||
.FirstOrDefault(x => x.end < employeeShift.start);
|
.FirstOrDefault(x => x.end < employeeShift.start);
|
||||||
@@ -299,8 +306,6 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
|
|
||||||
var lateExitRollCall = rollCallsInShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > employeeShift.end);
|
var lateExitRollCall = rollCallsInShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > employeeShift.end);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// تعجیل در خروج - زود رفتن
|
// تعجیل در خروج - زود رفتن
|
||||||
var nextShift = employeeShifts.OrderBy(x => x.start)
|
var nextShift = employeeShifts.OrderBy(x => x.start)
|
||||||
.FirstOrDefault(x => x.start > employeeShift.end);
|
.FirstOrDefault(x => x.start > employeeShift.end);
|
||||||
@@ -353,7 +358,9 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
|
|
||||||
var rotatingShifts = shiftDetails.rotatingShifts;
|
var rotatingShifts = shiftDetails.rotatingShifts;
|
||||||
|
|
||||||
var shift = FindRotatingShift(starDateTime, endDateTime, rotatingShifts);
|
var rollCallStartEnds = rollCalls.Select(x => (x.StartDate.Value, x.EndDate.Value)).ToList();
|
||||||
|
|
||||||
|
var shift = FindRotatingShift(rollCallStartEnds, rotatingShifts);
|
||||||
|
|
||||||
var rotatingShiftStart = shift.start;
|
var rotatingShiftStart = shift.start;
|
||||||
var rotatingShiftEnd = shift.end;
|
var rotatingShiftEnd = shift.end;
|
||||||
@@ -373,8 +380,8 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
var earlyEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate < shift.start);
|
var earlyEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate < shift.start);
|
||||||
|
|
||||||
var lateEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > shift.start);
|
var lateEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > shift.start);
|
||||||
|
//برای خالی کردن اولیه حضور غیاب انتخاب شده
|
||||||
|
earlyEntryRollCallRotating?.SetEarlyEnter(TimeSpan.Zero);
|
||||||
|
|
||||||
if (earlyEntryRollCallRotating != null)
|
if (earlyEntryRollCallRotating != null)
|
||||||
{
|
{
|
||||||
@@ -403,9 +410,10 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
var earlyExitRollCallRotating = rollCallsInRotatingShift.OrderByDescending(x => x.EndDate).FirstOrDefault(x => x.EndDate < shift.end);
|
var earlyExitRollCallRotating = rollCallsInRotatingShift.OrderByDescending(x => x.EndDate).FirstOrDefault(x => x.EndDate < shift.end);
|
||||||
|
|
||||||
var lateExitRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > shift.end);
|
var lateExitRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > shift.end);
|
||||||
|
//برای خالی کردن اولیه حضور غیاب انتخاب شده
|
||||||
|
earlyExitRollCallRotating?.SetEarlyExit(TimeSpan.Zero);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (earlyExitRollCallRotating != null && (rollCallsInRotatingShift.Any(x =>
|
if (earlyExitRollCallRotating != null && (rollCallsInRotatingShift.Any(x =>
|
||||||
x.StartDate < rotatingShiftEnd && x.StartDate > earlyExitRollCallRotating.EndDate) == false))
|
x.StartDate < rotatingShiftEnd && x.StartDate > earlyExitRollCallRotating.EndDate) == false))
|
||||||
@@ -448,17 +456,6 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
DateTime startDate = startRollCall.Date;
|
DateTime startDate = startRollCall.Date;
|
||||||
DateTime endDate = endRollCall.Date;
|
DateTime endDate = endRollCall.Date;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DateTime startEntryWithDate = startDate.Add(startRollCall.TimeOfDay);
|
|
||||||
DateTime endEntryWithDate = endDate.Add(endRollCall.TimeOfDay);
|
|
||||||
|
|
||||||
DateTime oneHourBeforeStart = startEntryWithDate.AddHours(-1);
|
|
||||||
DateTime oneHourAfterStart = startEntryWithDate.AddHours(1);
|
|
||||||
DateTime oneHourBeforeEnd = endEntryWithDate.AddHours(-1);
|
|
||||||
DateTime oneHourAfterEnd = endEntryWithDate.AddHours(1);
|
|
||||||
|
|
||||||
|
|
||||||
var shiftDateTimes = rotatingShifts.SelectMany(shift =>
|
var shiftDateTimes = rotatingShifts.SelectMany(shift =>
|
||||||
{
|
{
|
||||||
var shifts = new List<(DateTime Start, DateTime End)>();
|
var shifts = new List<(DateTime Start, DateTime End)>();
|
||||||
@@ -477,56 +474,69 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
|
|
||||||
#region مقایسه شروع حضور غیاب با شیفت
|
#region مقایسه شروع حضور غیاب با شیفت
|
||||||
|
|
||||||
var startFilteredTimes = shiftDateTimes.Where(shift =>
|
//var startFilteredTimes = shiftDateTimes.Where(shift =>
|
||||||
(oneHourBeforeStart <= shift.Start && oneHourAfterStart >= shift.Start) ||
|
// (twoHourBeforeStart <= shift.Start && twoHourAfterStart >= shift.Start) ||
|
||||||
(oneHourBeforeStart <= shift.End && oneHourAfterStart >= shift.End)).ToList();
|
// (twoHourBeforeStart <= shift.End && twoHourAfterStart >= shift.End)).ToList();
|
||||||
|
|
||||||
if (startFilteredTimes.Count == 0)
|
//if (startFilteredTimes.Count == 0)
|
||||||
{
|
//{
|
||||||
startFilteredTimes = shiftDateTimes;
|
// startFilteredTimes = shiftDateTimes;
|
||||||
}
|
//}
|
||||||
else if (startFilteredTimes.Count == 1)
|
//else if (startFilteredTimes.Count == 1)
|
||||||
{
|
//{
|
||||||
var startChosenShift = startFilteredTimes.First();
|
// var startChosenShift = startFilteredTimes.First();
|
||||||
|
|
||||||
if (startChosenShift.End < startChosenShift.Start)
|
// if (startChosenShift.End < startChosenShift.Start)
|
||||||
startChosenShift.End = startChosenShift.End.AddDays(1);
|
// startChosenShift.End = startChosenShift.End.AddDays(1);
|
||||||
|
|
||||||
return startChosenShift;
|
// return startChosenShift;
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
//#endregion
|
||||||
|
|
||||||
#region مقایسه پایان حضورغیاب با شیفت
|
//#region مقایسه پایان حضورغیاب با شیفت
|
||||||
|
|
||||||
var endFilteredTimes = shiftDateTimes.Where(shift =>
|
|
||||||
(oneHourBeforeEnd <= shift.Start && oneHourAfterEnd >= shift.Start) ||
|
|
||||||
(oneHourBeforeEnd <= shift.End && oneHourAfterEnd >= shift.End)).ToList();
|
|
||||||
if (endFilteredTimes.Count == 0)
|
|
||||||
{
|
|
||||||
endFilteredTimes = startFilteredTimes;
|
|
||||||
}
|
|
||||||
else if (endFilteredTimes.Count == 1)
|
|
||||||
{
|
|
||||||
var endChosenShift = endFilteredTimes.First();
|
|
||||||
return endChosenShift;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//var endFilteredTimes = shiftDateTimes.Where(shift =>
|
||||||
|
// (twoHourBeforeEnd <= shift.Start && twoHourAfterEnd >= shift.Start) ||
|
||||||
|
// (twoHourBeforeEnd <= shift.End && twoHourAfterEnd >= shift.End)).ToList();
|
||||||
|
//if (endFilteredTimes.Count == 0)
|
||||||
|
//{
|
||||||
|
// endFilteredTimes = startFilteredTimes;
|
||||||
|
//}
|
||||||
|
//else if (endFilteredTimes.Count == 1)
|
||||||
|
//{
|
||||||
|
// var endChosenShift = endFilteredTimes.First();
|
||||||
|
// return endChosenShift;
|
||||||
|
//}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region اشتراک حضور غیاب و شیفت
|
#region اشتراک حضور غیاب و شیفت
|
||||||
|
|
||||||
var overlapShifts = endFilteredTimes.Select(shift => new
|
var overlapShifts = shiftDateTimes
|
||||||
{
|
.Select(shift => new
|
||||||
Shift = shift,
|
{
|
||||||
Overlap = new TimeSpan(Math.Max(0,
|
Shift = shift,
|
||||||
Math.Min(shift.End.Ticks, oneHourAfterEnd.Ticks) -
|
Overlap = new TimeSpan(Math.Max(0,
|
||||||
Math.Max(shift.Start.Ticks, oneHourBeforeStart.Ticks)))
|
Math.Min(shift.End.Ticks, endRollCall.Ticks) -
|
||||||
});
|
Math.Max(shift.Start.Ticks, startRollCall.Ticks))),
|
||||||
|
// زمان حضور فرد در شیفت (مجموع Overlap با شیفت)
|
||||||
|
TotalTimeInShift = new TimeSpan(Math.Max(0,
|
||||||
|
Math.Min(shift.End.Ticks, endRollCall.Ticks) -
|
||||||
|
Math.Max(shift.Start.Ticks, startRollCall.Ticks))),
|
||||||
|
StartDistance = Math.Abs((shift.Start - startRollCall).Ticks),
|
||||||
|
EndDistance = Math.Abs((shift.End - endRollCall).Ticks),
|
||||||
|
TotalDistance = Math.Abs((shift.Start - startRollCall).Ticks) + Math.Abs((shift.End - endRollCall).Ticks)
|
||||||
|
})
|
||||||
|
.OrderByDescending(s => s.TotalTimeInShift) // 1. بیشترین زمان حضور فرد
|
||||||
|
.ThenByDescending(s => s.Overlap) // 2. بیشترین Overlap
|
||||||
|
.ThenBy(s => s.TotalDistance)
|
||||||
|
.ThenBy(s => s.StartDistance)
|
||||||
|
.ThenBy(x => x.EndDistance); // 3. اگر برابر بود،
|
||||||
|
|
||||||
var overlapChosenShift = overlapShifts.MaxBy(s => s.Overlap);
|
|
||||||
|
var overlapChosenShift = overlapShifts.First();
|
||||||
var end = overlapChosenShift.Shift.End;
|
var end = overlapChosenShift.Shift.End;
|
||||||
if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start)
|
if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start)
|
||||||
end = overlapChosenShift.Shift.End.AddDays(1);
|
end = overlapChosenShift.Shift.End.AddDays(1);
|
||||||
@@ -537,6 +547,145 @@ public class RollCallDomainService : IRollCallDomainService
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public (DateTime start, DateTime end) FindRotatingShift(List<(DateTime StartDate, DateTime EndDate)> rollCalls, ICollection<CustomizeRotatingShift> rotatingShifts)
|
||||||
|
{
|
||||||
|
|
||||||
|
DateTime startDate = rollCalls.MinBy(x => x.StartDate).StartDate.Date;
|
||||||
|
DateTime endDate = rollCalls.MaxBy(x => x.EndDate).EndDate.Date;
|
||||||
|
|
||||||
|
var shiftDateTimes = rotatingShifts.SelectMany(shift =>
|
||||||
|
{
|
||||||
|
var shifts = new List<(DateTime Start, DateTime End)>();
|
||||||
|
for (int i = -1; i <= 1; i++)
|
||||||
|
{
|
||||||
|
var shiftStart = startDate.AddDays(i).Date;
|
||||||
|
shiftStart = shiftStart.Add(shift.StartTime.ToTimeSpan());
|
||||||
|
var shiftEnd = shift.StartTime < shift.EndTime
|
||||||
|
? startDate.AddDays(i).Date.Add(shift.EndTime.ToTimeSpan())
|
||||||
|
: startDate.AddDays(i + 1).Date.Add(shift.EndTime.ToTimeSpan());
|
||||||
|
shifts.Add((shiftStart, shiftEnd));
|
||||||
|
}
|
||||||
|
|
||||||
|
return shifts;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
//var shiftScores = shiftDateTimes
|
||||||
|
// .Select(shift =>
|
||||||
|
// {
|
||||||
|
// var totalOverlap = TimeSpan.Zero;
|
||||||
|
|
||||||
|
// var firstRollCall = rollCalls.MinBy(x => x.StartDate);
|
||||||
|
// var lastRollCall = rollCalls.MaxBy(x => x.EndDate);
|
||||||
|
|
||||||
|
// long totalStartDistance = Math.Abs((shift.Start - firstRollCall.StartDate).Ticks);
|
||||||
|
// long totalEndDistance = Math.Abs((shift.End - lastRollCall.EndDate).Ticks);
|
||||||
|
|
||||||
|
|
||||||
|
// foreach (var rollCall in rollCalls)
|
||||||
|
// {
|
||||||
|
// var start = rollCall.StartDate;
|
||||||
|
// var end = rollCall.EndDate;
|
||||||
|
|
||||||
|
// var overlapTicks = Math.Max(0,
|
||||||
|
// Math.Min(shift.End.Ticks, end.Ticks) -
|
||||||
|
// Math.Max(shift.Start.Ticks, start.Ticks));
|
||||||
|
|
||||||
|
// totalOverlap += new TimeSpan(overlapTicks);
|
||||||
|
// //totalStartDistance += Math.Abs((shift.Start - start).Ticks);
|
||||||
|
// //totalEndDistance += Math.Abs((shift.End - end).Ticks);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return new
|
||||||
|
// {
|
||||||
|
// Shift = shift,
|
||||||
|
// TotalOverlap = totalOverlap,
|
||||||
|
// TotalDistance = totalStartDistance + totalEndDistance,
|
||||||
|
// StartDistance = totalStartDistance,
|
||||||
|
// EndDistance = totalEndDistance
|
||||||
|
// };
|
||||||
|
// })
|
||||||
|
// .OrderBy(s => s.StartDistance)
|
||||||
|
// .ThenBy(s => s.TotalDistance)
|
||||||
|
// .ThenByDescending(s => s.TotalOverlap)
|
||||||
|
// .ThenBy(s => s.EndDistance);
|
||||||
|
|
||||||
|
|
||||||
|
// مرحله 1: گروهبندی بر اساس نزدیکی زمان شروع به اولین حضور و غیاب
|
||||||
|
var groupedByStart = shiftDateTimes
|
||||||
|
.GroupBy(shift =>
|
||||||
|
{
|
||||||
|
var firstRollCallStart = rollCalls.Min(x => x.StartDate);
|
||||||
|
var ticksDiff = Math.Abs((shift.Start - firstRollCallStart).Ticks);
|
||||||
|
return Math.Round(TimeSpan.FromTicks(ticksDiff).TotalMinutes / 30); // گروهبندی هر 30 دقیقه
|
||||||
|
})
|
||||||
|
.OrderBy(g => g.Key)
|
||||||
|
.First(); // نزدیکترین گروه به شروع
|
||||||
|
|
||||||
|
// مرحله 2 (جایگزین مرحله ۴): گروهبندی بر اساس نزدیکی پایان شیفت به آخرین حضور و غیاب
|
||||||
|
var filteredByEnd = groupedByStart
|
||||||
|
.Select(shift =>
|
||||||
|
{
|
||||||
|
var lastRollCallEnd = rollCalls.Max(x => x.EndDate);
|
||||||
|
var endDistance = Math.Abs((shift.End - lastRollCallEnd).Ticks);
|
||||||
|
return new { Shift = shift, EndDistance = endDistance };
|
||||||
|
})
|
||||||
|
.GroupBy(x => x.EndDistance / TimeSpan.FromMinutes(30).Ticks) // گروهبندی هر 30 دقیقه
|
||||||
|
.OrderBy(g => g.Key)
|
||||||
|
.First() // نزدیکترین پایان
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// مرحله 3: فیلتر بر اساس بیشترین همپوشانی با حضور و غیابها
|
||||||
|
var filteredByOverlap = filteredByEnd
|
||||||
|
.Select(shift =>
|
||||||
|
{
|
||||||
|
var totalOverlap = TimeSpan.Zero;
|
||||||
|
foreach (var rollCall in rollCalls)
|
||||||
|
{
|
||||||
|
var overlapTicks = Math.Max(0,
|
||||||
|
Math.Min(shift.Shift.End.Ticks, rollCall.EndDate.Ticks) -
|
||||||
|
Math.Max(shift.Shift.Start.Ticks, rollCall.StartDate.Ticks));
|
||||||
|
totalOverlap += new TimeSpan(overlapTicks);
|
||||||
|
}
|
||||||
|
return new { Shift = shift.Shift, TotalOverlap = totalOverlap };
|
||||||
|
})
|
||||||
|
.GroupBy(x => Math.Round(x.TotalOverlap.TotalMinutes /5)) // گروهبندی همپوشانی
|
||||||
|
.OrderByDescending(g => g.Key) // بیشترین همپوشانی اول
|
||||||
|
.First()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// مرحله 4 (جایگزین مرحله ۲): فیلتر نهایی بر اساس کمترین مجموع فاصله (TotalDistance)
|
||||||
|
var bestShift = filteredByOverlap
|
||||||
|
.Select(shift =>
|
||||||
|
{
|
||||||
|
var firstRollCall = rollCalls.MinBy(x => x.StartDate);
|
||||||
|
var lastRollCall = rollCalls.MaxBy(x => x.EndDate);
|
||||||
|
var totalDistance =
|
||||||
|
Math.Abs((shift.Shift.Start - firstRollCall.StartDate).Ticks) +
|
||||||
|
Math.Abs((shift.Shift.End - lastRollCall.EndDate).Ticks);
|
||||||
|
return new { Shift = shift.Shift, TotalDistance = totalDistance };
|
||||||
|
})
|
||||||
|
.OrderBy(x => x.TotalDistance) // کمترین فاصله کلی
|
||||||
|
.First(); // بهترین شیفت نهایی
|
||||||
|
var overlapChosenShift = bestShift;
|
||||||
|
var end = overlapChosenShift.Shift.End;
|
||||||
|
if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start)
|
||||||
|
end = overlapChosenShift.Shift.End.AddDays(1);
|
||||||
|
|
||||||
|
|
||||||
|
return (overlapChosenShift.Shift.Start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BreakTime GetBreakTime(long employeeId, long workshopId)
|
||||||
|
{
|
||||||
|
var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId,
|
||||||
|
employeeId);
|
||||||
|
if (employeeSettings == null)
|
||||||
|
{
|
||||||
|
return new BreakTime(false, TimeOnly.MinValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return employeeSettings.BreakTime;
|
||||||
|
}
|
||||||
private DateTime CalculateRegularShiftDate(DateTime startDate, TimeOnly offset)
|
private DateTime CalculateRegularShiftDate(DateTime startDate, TimeOnly offset)
|
||||||
{
|
{
|
||||||
DateTime nextOffSetDateTime;
|
DateTime nextOffSetDateTime;
|
||||||
|
|||||||
@@ -1,25 +1,58 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities;
|
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities;
|
||||||
using CompanyManagment.App.Contracts.Contract;
|
using CompanyManagment.App.Contracts.Contract;
|
||||||
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
|
using CompanyManagment.App.Contracts.Loan;
|
||||||
using CompanyManagment.App.Contracts.RollCall;
|
using CompanyManagment.App.Contracts.RollCall;
|
||||||
|
using CompanyManagment.App.Contracts.SalaryAid;
|
||||||
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
||||||
|
|
||||||
namespace Company.Domain.RollCallAgg;
|
namespace Company.Domain.RollCallAgg;
|
||||||
|
|
||||||
public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
|
public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
|
||||||
{
|
{
|
||||||
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking);
|
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout);
|
||||||
TimeSpan AfterSubtract(CreateWorkingHoursTemp command, TimeSpan sumOneDaySpan, DateTime creationDate);
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="employeeId"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <param name="contractStart"></param>
|
||||||
|
/// <param name="contractEnd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
(bool hasRollCall, TimeSpan sumOfSpan) GetRollCallWorkingSpan(long employeeId, long workshopId,
|
||||||
|
DateTime contractStart, DateTime contractEnd);
|
||||||
|
|
||||||
|
TimeSpan AfterSubtract(CreateWorkingHoursTemp command, TimeSpan sumOneDaySpan, DateTime creationDate);
|
||||||
|
|
||||||
List<RotatingShiftViewModel> RotatingShiftCheck(List<GroupedRollCalls> rollCallList);
|
List<RotatingShiftViewModel> RotatingShiftCheck(List<GroupedRollCalls> rollCallList);
|
||||||
|
|
||||||
|
List<RollCallViewModel> ConvertStaticHoursToRollCall(CreateWorkingHoursTemp command, bool workshopHolidyWorking);
|
||||||
CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd);
|
CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||||
|
|
||||||
List<LateToWorkEarlyExistSpannig> LateToWorkEarlyExit(List<GroupedRollCalls> groupedRollCall,
|
List<LateToWorkEarlyExistSpannig> LateToWorkEarlyExit(List<GroupedRollCalls> groupedRollCall,
|
||||||
ICollection<CustomizeWorkshopEmployeeSettingsShift> shiftSettings, List<LeaveViewModel> leavList);
|
ICollection<CustomizeWorkshopEmployeeSettingsShift> shiftSettings, List<LeaveViewModel> leavList);
|
||||||
|
|
||||||
|
List<LoanInstallmentViewModel> LoanInstallmentForCheckout(long employeeId, long workshopId, DateTime contractStart,
|
||||||
|
DateTime contractEnd);
|
||||||
|
|
||||||
|
List<SalaryAidViewModel> SalaryAidsForCheckout(long employeeId, long workshopId, DateTime checkoutStart,
|
||||||
|
DateTime checkoutEnd);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// گزارش نوبت کاری حضور غیاب
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <param name="employeeId"></param>
|
||||||
|
/// <param name="contractStart"></param>
|
||||||
|
/// <param name="contractEnd"></param>
|
||||||
|
/// <param name="shiftwork"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart,
|
||||||
|
DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command,bool holidayWorking);
|
||||||
}
|
}
|
||||||
@@ -87,6 +87,9 @@ namespace Company.Domain.RollCallAgg
|
|||||||
long workshopId);
|
long workshopId);
|
||||||
|
|
||||||
Task<List<RollCall>> GetRollCallsInShiftDate(DateTime rollCallShiftDate, long employeeId, long workshopId);
|
Task<List<RollCall>> GetRollCallsInShiftDate(DateTime rollCallShiftDate, long employeeId, long workshopId);
|
||||||
|
|
||||||
|
Task<List<RollCall>> GetRollCallsUntilNowWithWorkshopIdEmployeeIds(long workshopId, List<long> employeeIds,
|
||||||
|
DateTime fromDate);
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ using System;
|
|||||||
using Company.Domain.RollCallAgg.DomainService;
|
using Company.Domain.RollCallAgg.DomainService;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using _0_Framework.Exceptions;
|
using _0_Framework.Exceptions;
|
||||||
|
using Company.Domain.EmployeeAgg;
|
||||||
|
using Company.Domain.WorkshopAgg;
|
||||||
|
|
||||||
namespace Company.Domain.RollCallAgg
|
namespace Company.Domain.RollCallAgg
|
||||||
{
|
{
|
||||||
@@ -34,10 +36,10 @@ namespace Company.Domain.RollCallAgg
|
|||||||
{
|
{
|
||||||
throw new NotFoundException("اطلاعات گروهبندی شخص نامعتبر است");
|
throw new NotFoundException("اطلاعات گروهبندی شخص نامعتبر است");
|
||||||
}
|
}
|
||||||
|
SetBreakTime(service, employeeId, workshopId);
|
||||||
//if (endDate.HasValue)
|
//if (endDate.HasValue)
|
||||||
//{
|
//{
|
||||||
// Edit(StartDate.Value,endDate.Value,service);
|
// Edit(StartDate.Value,endDate.Value,service);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -198,30 +200,7 @@ namespace Company.Domain.RollCallAgg
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Truncates the TimeSpan to only include days, hours, and minutes.
|
|
||||||
/// Removes seconds, milliseconds, and smaller units.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="time">The original TimeSpan value.</param>
|
|
||||||
/// <returns>A truncated TimeSpan with only days, hours, and minutes.</returns>
|
|
||||||
private TimeSpan TruncateTimeSpan(TimeSpan time)
|
|
||||||
{
|
|
||||||
return new TimeSpan(time.Days, time.Hours, time.Minutes, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Truncates the DateTime to only include Years,Month,days,Hours and Minutes.
|
|
||||||
/// Removes seconds, milliseconds, and smaller units.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dateTime">The original DateTime value.</param>
|
|
||||||
/// <returns>A truncated DateTime with only days, hours, and minutes.</returns>
|
|
||||||
private DateTime TruncateDateTime(DateTime dateTime)
|
|
||||||
{
|
|
||||||
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour,
|
|
||||||
dateTime.Minute, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void SetEndDateTime(DateTime endDate, IRollCallDomainService service)
|
public void SetEndDateTime(DateTime endDate, IRollCallDomainService service)
|
||||||
{
|
{
|
||||||
@@ -238,7 +217,7 @@ namespace Company.Domain.RollCallAgg
|
|||||||
////محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
|
////محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
|
||||||
service.CalculateTimeDifferences(this);
|
service.CalculateTimeDifferences(this);
|
||||||
|
|
||||||
|
SetBreakTime(service, EmployeeId, WorkshopId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -259,6 +238,8 @@ namespace Company.Domain.RollCallAgg
|
|||||||
//محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
|
//محاسبه اختلاف زمانی(تاخیر و تعجیل)ء
|
||||||
service.CalculateTimeDifferences(this);
|
service.CalculateTimeDifferences(this);
|
||||||
|
|
||||||
|
SetBreakTime(service, EmployeeId, WorkshopId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -276,7 +257,7 @@ namespace Company.Domain.RollCallAgg
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetShiftDate(IRollCallDomainService service)
|
public void SetShiftDate(IRollCallDomainService service)
|
||||||
{
|
{
|
||||||
ShiftDate = service.GetEmployeeShiftDateByRollCallStartDate(WorkshopId, EmployeeId, StartDate!.Value,EndDate.Value);
|
ShiftDate = service.GetEmployeeShiftDateByRollCallStartDate(WorkshopId, EmployeeId, StartDate!.Value,EndDate.Value);
|
||||||
}
|
}
|
||||||
@@ -331,6 +312,40 @@ namespace Company.Domain.RollCallAgg
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void SetBreakTime(IRollCallDomainService rollCallDomainService, long employeeId, long workshopId)
|
||||||
|
{
|
||||||
|
var breakTime = rollCallDomainService.GetBreakTime(employeeId, workshopId);
|
||||||
|
|
||||||
|
if (breakTime.BreakTimeType == BreakTimeType.WithTime)
|
||||||
|
BreakTimeSpan = breakTime.BreakTimeValue.ToTimeSpan();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Truncates the TimeSpan to only include days, hours, and minutes.
|
||||||
|
/// Removes seconds, milliseconds, and smaller units.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="time">The original TimeSpan value.</param>
|
||||||
|
/// <returns>A truncated TimeSpan with only days, hours, and minutes.</returns>
|
||||||
|
private TimeSpan TruncateTimeSpan(TimeSpan time)
|
||||||
|
{
|
||||||
|
return new TimeSpan(time.Days, time.Hours, time.Minutes, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Truncates the DateTime to only include Years,Month,days,Hours and Minutes.
|
||||||
|
/// Removes seconds, milliseconds, and smaller units.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dateTime">The original DateTime value.</param>
|
||||||
|
/// <returns>A truncated DateTime with only days, hours, and minutes.</returns>
|
||||||
|
private DateTime TruncateDateTime(DateTime dateTime)
|
||||||
|
{
|
||||||
|
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour,
|
||||||
|
dateTime.Minute, 0);
|
||||||
|
}
|
||||||
//private static (DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts)
|
//private static (DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, ICollection<CustomizeRotatingShift> rotatingShifts)
|
||||||
//{
|
//{
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.RollCallEmployee;
|
using CompanyManagment.App.Contracts.RollCallEmployee;
|
||||||
|
|
||||||
@@ -6,6 +7,7 @@ namespace Company.Domain.RollCallEmployeeAgg;
|
|||||||
|
|
||||||
public interface IRollCallEmployeeRepository : IRepository<long, RollCallEmployee>
|
public interface IRollCallEmployeeRepository : IRepository<long, RollCallEmployee>
|
||||||
{
|
{
|
||||||
|
bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||||
List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId);
|
List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId);
|
||||||
EditRollCallEmployee GetDetails(long id);
|
EditRollCallEmployee GetDetails(long id);
|
||||||
RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId);
|
RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId);
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ using Hangfire.Annotations;
|
|||||||
|
|
||||||
namespace Company.Domain.SalaryAidAgg;
|
namespace Company.Domain.SalaryAidAgg;
|
||||||
|
|
||||||
public class SalaryAid:EntityBase
|
public class SalaryAid : EntityBase
|
||||||
{
|
{
|
||||||
private SalaryAid()
|
private SalaryAid()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
public SalaryAid(long employeeId, long workshopId, double amount, DateTime salaryAidDateTime, long createdByAccountId, UserType createdByUserType)
|
public SalaryAid(long employeeId, long workshopId, double amount, DateTime salaryAidDateTime, long createdByAccountId, UserType createdByUserType, int calculationMonth, int calculationYear)
|
||||||
{
|
{
|
||||||
EmployeeId = employeeId;
|
EmployeeId = employeeId;
|
||||||
WorkshopId = workshopId;
|
WorkshopId = workshopId;
|
||||||
@@ -19,12 +19,25 @@ public class SalaryAid:EntityBase
|
|||||||
SalaryAidDateTime = salaryAidDateTime;
|
SalaryAidDateTime = salaryAidDateTime;
|
||||||
CreatedByUserType = createdByUserType;
|
CreatedByUserType = createdByUserType;
|
||||||
CreatedByAccountId = createdByAccountId;
|
CreatedByAccountId = createdByAccountId;
|
||||||
|
CalculationDate = $"{calculationYear:0000}/{calculationMonth:00}/01".ToGeorgianDateTime();
|
||||||
|
CalculationMonth = calculationMonth;
|
||||||
|
CalculationYear = calculationYear;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long EmployeeId { get; private set; }
|
public long EmployeeId { get; private set; }
|
||||||
public long WorkshopId { get; private set; }
|
public long WorkshopId { get; private set; }
|
||||||
public double Amount { get; private set; }
|
public double Amount { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پرداخت
|
||||||
|
/// </summary>
|
||||||
public DateTime SalaryAidDateTime { get; private set; }
|
public DateTime SalaryAidDateTime { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ محاسبه
|
||||||
|
/// </summary>
|
||||||
|
public DateTime CalculationDate { get; private set; }
|
||||||
|
|
||||||
|
public int CalculationMonth { get; set; }
|
||||||
|
public int CalculationYear { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public long CreatedByAccountId { get; private set; }
|
public long CreatedByAccountId { get; private set; }
|
||||||
@@ -36,11 +49,14 @@ public class SalaryAid:EntityBase
|
|||||||
public UserType LastModifiedByUserType { get; private set; }
|
public UserType LastModifiedByUserType { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public void Edit(double amount, DateTime salaryAidTime, long modifiedByAccountId, UserType modifiedByUserType)
|
public void Edit(double amount, DateTime salaryAidTime, long modifiedByAccountId, UserType modifiedByUserType, int calculationMonth, int calculationYear)
|
||||||
{
|
{
|
||||||
Amount = amount;
|
Amount = amount;
|
||||||
SalaryAidDateTime = salaryAidTime;
|
SalaryAidDateTime = salaryAidTime;
|
||||||
LastModifiedByAccountId = modifiedByAccountId;
|
LastModifiedByAccountId = modifiedByAccountId;
|
||||||
LastModifiedByUserType = modifiedByUserType;
|
LastModifiedByUserType = modifiedByUserType;
|
||||||
|
CalculationDate = $"{calculationYear:0000}/{calculationMonth:00}/01".ToGeorgianDateTime();
|
||||||
|
CalculationMonth = calculationMonth;
|
||||||
|
CalculationYear = calculationYear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,5 +14,7 @@ public interface IWorkshopTempRepository : IRepository<long, WorkshopTemp>
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<WorkshopTempViewModel>> GetWorkshopTemp(long contractingPartyTemp);
|
Task<List<WorkshopTempViewModel>> GetWorkshopTemp(long contractingPartyTemp);
|
||||||
|
|
||||||
|
System.Threading.Tasks.Task RemoveWorkshopTemps(List<long> workshopTempIds);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -34,12 +34,14 @@ public class InstitutionContractTemp : EntityBase
|
|||||||
/// بصورت یکجا
|
/// بصورت یکجا
|
||||||
/// -
|
/// -
|
||||||
/// بصئورت ماهیانه
|
/// بصئورت ماهیانه
|
||||||
|
/// OneTime
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string PaymentModel { get; private set; }
|
public string PaymentModel { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// مدت قرارداد
|
/// مدت قرارداد
|
||||||
/// چند ماهه؟
|
/// چند ماهه؟
|
||||||
|
/// "12"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string PeriodModel { get; private set; }
|
public string PeriodModel { get; private set; }
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ public interface IWorkshopRepository : IRepository<long, Workshop>
|
|||||||
Task<int> GetWorkshopsForEmployeeStartWorkCount(long accountId);
|
Task<int> GetWorkshopsForEmployeeStartWorkCount(long accountId);
|
||||||
Task<List<WorkshopWithLeftWorkTempEmployeesDto>> GetWorkshopsForLeftWorkTemp(long accountId);
|
Task<List<WorkshopWithLeftWorkTempEmployeesDto>> GetWorkshopsForLeftWorkTemp(long accountId);
|
||||||
Task<int> GetWorkshopsForLeftWorkTempCount(long accountId);
|
Task<int> GetWorkshopsForLeftWorkTempCount(long accountId);
|
||||||
|
Task<List<WorkshopSelectListViewModel>> GetSelectList(string search);
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,9 @@ public class Workshop : EntityBase
|
|||||||
//}
|
//}
|
||||||
public Workshop(string workshopName,string workshopSureName, string insuranceCode, string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
|
public Workshop(string workshopName,string workshopSureName, string insuranceCode, string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
|
||||||
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
|
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
|
||||||
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking)
|
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide,
|
||||||
|
bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
|
||||||
|
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance)
|
||||||
{
|
{
|
||||||
WorkshopName = workshopName;
|
WorkshopName = workshopName;
|
||||||
WorkshopSureName = workshopSureName;
|
WorkshopSureName = workshopSureName;
|
||||||
@@ -132,6 +134,8 @@ public class Workshop : EntityBase
|
|||||||
YearsOptions = yearsOptions;
|
YearsOptions = yearsOptions;
|
||||||
HasRollCallFreeVip = hasRollCallFreeVip;
|
HasRollCallFreeVip = hasRollCallFreeVip;
|
||||||
WorkshopHolidayWorking = workshopHolidayWorking;
|
WorkshopHolidayWorking = workshopHolidayWorking;
|
||||||
|
InsuranceCheckoutOvertime = insuranceCheckoutOvertime;
|
||||||
|
InsuranceCheckoutFamilyAllowance = insuranceCheckoutFamilyAllowance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -198,6 +202,14 @@ public class Workshop : EntityBase
|
|||||||
//کارگاه هایی که در تعطیلات رسمی باز هستند
|
//کارگاه هایی که در تعطیلات رسمی باز هستند
|
||||||
public bool WorkshopHolidayWorking { get; private set; }
|
public bool WorkshopHolidayWorking { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه اضافه کار فیش حقوقی در لیست بیمه
|
||||||
|
/// </summary>
|
||||||
|
public bool InsuranceCheckoutOvertime { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه حق اولاد در لیست بیمه
|
||||||
|
/// </summary>
|
||||||
|
public bool InsuranceCheckoutFamilyAllowance { get; private set; }
|
||||||
//public Employer Employer { get; private set; }
|
//public Employer Employer { get; private set; }
|
||||||
|
|
||||||
public Workshop()
|
public Workshop()
|
||||||
@@ -229,7 +241,9 @@ public class Workshop : EntityBase
|
|||||||
|
|
||||||
public void Edit(string workshopName, string workshopSureName, string insuranceCode,string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
|
public void Edit(string workshopName, string workshopSureName, string insuranceCode,string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
|
||||||
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
|
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
|
||||||
string agreementNumber, bool fixedSalary, string population, long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay,bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking)
|
string agreementNumber, bool fixedSalary, string population, long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay,
|
||||||
|
bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
|
||||||
|
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance)
|
||||||
{
|
{
|
||||||
WorkshopName = workshopName;
|
WorkshopName = workshopName;
|
||||||
WorkshopSureName = workshopSureName;
|
WorkshopSureName = workshopSureName;
|
||||||
@@ -268,7 +282,9 @@ public class Workshop : EntityBase
|
|||||||
YearsOptions = yearsOptions;
|
YearsOptions = yearsOptions;
|
||||||
HasRollCallFreeVip = hasRollCallFreeVip;
|
HasRollCallFreeVip = hasRollCallFreeVip;
|
||||||
WorkshopHolidayWorking = workshopHolidayWorking;
|
WorkshopHolidayWorking = workshopHolidayWorking;
|
||||||
}
|
InsuranceCheckoutOvertime = insuranceCheckoutOvertime;
|
||||||
|
InsuranceCheckoutFamilyAllowance = insuranceCheckoutFamilyAllowance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Active(string archiveCode)
|
public void Active(string archiveCode)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
|
|||||||
void TestDayliFeeCompute();
|
void TestDayliFeeCompute();
|
||||||
List<string> GetYears();
|
List<string> GetYears();
|
||||||
List<YearlySalaryViewModel> GetYearlySalary();
|
List<YearlySalaryViewModel> GetYearlySalary();
|
||||||
MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking);
|
MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking,string shiftWork);
|
||||||
double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, double housingAllowance, double familyAllowance , string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM);
|
double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, double housingAllowance, double familyAllowance , string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM);
|
||||||
double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM);
|
double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM);
|
||||||
double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM);
|
double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.Checkout;
|
using CompanyManagment.App.Contracts.Checkout;
|
||||||
@@ -33,6 +34,9 @@ public interface IEmployerRepository : IRepository<long, Employer>
|
|||||||
|
|
||||||
List<EmployerViewModel> GetEmployersHasWorkshop();
|
List<EmployerViewModel> GetEmployersHasWorkshop();
|
||||||
|
|
||||||
|
Task<List<EmployerSelectListViewModel>> GetSelectList(string search);
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region NewByHeydari
|
#region NewByHeydari
|
||||||
@@ -52,6 +56,16 @@ public interface IEmployerRepository : IRepository<long, Employer>
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Api
|
||||||
|
Task<List<GetEmployerListViewModel>> GetEmployerList(GetEmployerSearchModel searchModel);
|
||||||
|
|
||||||
|
Task<GetLegalEmployerDetailViewModel> GetLegalEmployerDetail(long id);
|
||||||
|
Task<GetRealEmployerDetailViewModel> GetRealEmployerDetail(long id);
|
||||||
|
//Task<List<EmployerSelectListViewModel>> GetSelectList(string search);
|
||||||
|
Task<OperationResult<string>> DeactivateWithSubordinates(long id);
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
using CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
|
||||||
|
using OfficeOpenXml.Style;
|
||||||
|
using OfficeOpenXml;
|
||||||
|
using System.Drawing;
|
||||||
|
using _0_Framework.Application;
|
||||||
|
|
||||||
|
namespace CompanyManagement.Infrastructure.Excel.CWS;
|
||||||
|
public class CustomizeWorkshopGroupExcelViewModel
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string ShiftType { get; set; }
|
||||||
|
public string Shifts { get; set; }
|
||||||
|
public string Salary { get; set; }
|
||||||
|
public List<CustomizeWorkshopEmployeeExcelViewModel> EmployeeSettings { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CustomizeWorkshopEmployeeExcelViewModel
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string ShiftType { get; set; }
|
||||||
|
public string Shifts { get; set; }
|
||||||
|
public int LeavePermitted { get; set; }
|
||||||
|
public string Salary { get; set; }
|
||||||
|
}
|
||||||
|
public class CustomizeWorkshopGroupSettingExcelGenerator
|
||||||
|
{
|
||||||
|
public static byte[] Generate(List<CustomizeWorkshopGroupExcelViewModel> groups)
|
||||||
|
{
|
||||||
|
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
|
||||||
|
using (var package = new ExcelPackage())
|
||||||
|
{
|
||||||
|
var worksheet = package.Workbook.Worksheets.Add("GroupsAndEmployees");
|
||||||
|
|
||||||
|
// Headers
|
||||||
|
worksheet.Cells[1, 1].Value = "نام گروه";
|
||||||
|
worksheet.Cells[1, 2].Value = "نوع شیفت گروه";
|
||||||
|
worksheet.Cells[1, 3].Value = "شیفت گروه";
|
||||||
|
worksheet.Cells[1, 4].Value = "حقوق گروه";
|
||||||
|
|
||||||
|
worksheet.Cells[1, 5].Value = "نام پرسنل";
|
||||||
|
worksheet.Cells[1, 6].Value = "مجاز مرخصی پرسنل";
|
||||||
|
worksheet.Cells[1, 7].Value = "نوع شیفت پرسنل";
|
||||||
|
worksheet.Cells[1, 8].Value = "شیفت پرسنل";
|
||||||
|
worksheet.Cells[1, 9].Value = "حقوق پرسنل";
|
||||||
|
|
||||||
|
using (var range = worksheet.Cells[1, 1, 1, 9])
|
||||||
|
{
|
||||||
|
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||||
|
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||||
|
range.Style.Font.Bold = true;
|
||||||
|
range.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
||||||
|
range.Style.Fill.BackgroundColor.SetColor(Color.LightGray); // رنگ پس زمینه خاکستری
|
||||||
|
|
||||||
|
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
||||||
|
}
|
||||||
|
|
||||||
|
int row = 2;
|
||||||
|
|
||||||
|
foreach (var group in groups)
|
||||||
|
{
|
||||||
|
var employees = group.EmployeeSettings ?? new List<CustomizeWorkshopEmployeeExcelViewModel>();
|
||||||
|
int groupStartRow = row;
|
||||||
|
int groupEndRow = employees.Count > 0 ? (row + employees.Count - 1) : row;
|
||||||
|
|
||||||
|
if (employees.Count == 0)
|
||||||
|
{
|
||||||
|
// گروه بدون پرسنل
|
||||||
|
worksheet.Cells[row, 1].Value = group.Name;
|
||||||
|
worksheet.Cells[row, 2].Value = group.ShiftType;
|
||||||
|
worksheet.Cells[row, 3].Value = group.Shifts;
|
||||||
|
worksheet.Cells[row, 4].Value = Convert.ToInt32(group.Salary);
|
||||||
|
|
||||||
|
ApplyGroupStyle(worksheet, row, row);
|
||||||
|
worksheet.Cells[row, 4].Style.Numberformat.Format = "#,##0";
|
||||||
|
using (var thickBorderRange = worksheet.Cells[groupEndRow, 1, groupEndRow, 9])
|
||||||
|
{
|
||||||
|
thickBorderRange.Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
|
||||||
|
}
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var employee in employees)
|
||||||
|
{
|
||||||
|
worksheet.Cells[row, 5].Value = employee.Name;
|
||||||
|
worksheet.Cells[row, 6].Value = employee.LeavePermitted;
|
||||||
|
worksheet.Cells[row, 7].Value = employee.ShiftType;
|
||||||
|
worksheet.Cells[row, 8].Value = employee.Shifts;
|
||||||
|
worksheet.Cells[row, 9].Value = Convert.ToInt32(employee.Salary);
|
||||||
|
|
||||||
|
ApplyEmployeeStyle(worksheet, row);
|
||||||
|
worksheet.Cells[row, 9].Style.Numberformat.Format = "#,##0";
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge اطلاعات گروه برای تمام پرسنل
|
||||||
|
worksheet.Cells[groupStartRow, 1, groupEndRow, 1].Merge = true;
|
||||||
|
worksheet.Cells[groupStartRow, 1].Value = group.Name;
|
||||||
|
|
||||||
|
worksheet.Cells[groupStartRow, 2, groupEndRow, 2].Merge = true;
|
||||||
|
worksheet.Cells[groupStartRow, 2].Value = group.ShiftType;
|
||||||
|
|
||||||
|
worksheet.Cells[groupStartRow, 3, groupEndRow, 3].Merge = true;
|
||||||
|
worksheet.Cells[groupStartRow, 3].Value = group.Shifts;
|
||||||
|
|
||||||
|
worksheet.Cells[groupStartRow, 4, groupEndRow, 4].Merge = true;
|
||||||
|
worksheet.Cells[groupStartRow, 4].Value = Convert.ToInt32(group.Salary);
|
||||||
|
|
||||||
|
ApplyGroupStyle(worksheet, groupStartRow, groupEndRow);
|
||||||
|
|
||||||
|
worksheet.Cells[groupStartRow, 4, groupEndRow, 4].Style.Numberformat.Format = "#,##0";
|
||||||
|
|
||||||
|
|
||||||
|
worksheet.Cells[groupEndRow, 1, groupEndRow, 9].Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
|
||||||
|
|
||||||
|
for (int i = 2; i <= worksheet.Dimension.Rows; i++)
|
||||||
|
{
|
||||||
|
worksheet.Row(i).Height = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
int groupShiftCol = 3;
|
||||||
|
int employeeShiftCol = 8;
|
||||||
|
int groupSalary = 4;
|
||||||
|
int employeeSalary = 9;
|
||||||
|
int employeeName =5;
|
||||||
|
worksheet.Columns[groupShiftCol].Width = 15;
|
||||||
|
worksheet.Columns[employeeShiftCol].Width = 15;
|
||||||
|
worksheet.Columns[groupSalary].Width = 16;
|
||||||
|
worksheet.Columns[employeeSalary].Width = 16;
|
||||||
|
worksheet.Columns[employeeName].Width = 24;
|
||||||
|
worksheet.View.RightToLeft = true; // فارسی
|
||||||
|
return package.GetAsByteArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ApplyEmployeeStyle(ExcelWorksheet worksheet, int row)
|
||||||
|
{
|
||||||
|
using (var range = worksheet.Cells[row, 5, row, 9])
|
||||||
|
{
|
||||||
|
//range.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
||||||
|
//range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(198, 239, 206)); // سبز خیلی روشن
|
||||||
|
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
||||||
|
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||||
|
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||||
|
|
||||||
|
// اضافه کردن بوردر به همهی سلولهای ردیف پرسنل
|
||||||
|
range.Style.Border.Top.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Left.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Right.Style = ExcelBorderStyle.Thin;
|
||||||
|
|
||||||
|
range.Style.WrapText = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ApplyGroupStyle(ExcelWorksheet worksheet, int startRow, int endRow)
|
||||||
|
{
|
||||||
|
using (var range = worksheet.Cells[startRow, 1, endRow, 4])
|
||||||
|
{
|
||||||
|
//range.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
||||||
|
//range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(255, 255, 204)); // زرد خیلی روشن
|
||||||
|
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
||||||
|
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||||
|
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||||
|
|
||||||
|
// اضافه کردن بوردر به همهی سلولهای گروه
|
||||||
|
range.Style.Border.Top.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Left.Style = ExcelBorderStyle.Thin;
|
||||||
|
range.Style.Border.Right.Style = ExcelBorderStyle.Thin;
|
||||||
|
|
||||||
|
range.Style.WrapText = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user