add status for GetList in InstitutionContractRepository.cs
This commit is contained in:
@@ -104,12 +104,25 @@ public class InstitutionContractListSearchModel
|
||||
/// </summary>
|
||||
public string ContractDateTo { get; set; }
|
||||
|
||||
public InstitutionContractStatus? Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ایندکس صفحه
|
||||
/// </summary>
|
||||
public int PageIndex { get; set; }
|
||||
}
|
||||
|
||||
public enum InstitutionContractStatus
|
||||
{
|
||||
Active,
|
||||
Deactive,
|
||||
DeactiveWithDebt,
|
||||
Block,
|
||||
Free,
|
||||
PendingForRenewal,
|
||||
WithoutWorkshop,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// لیست قرارداد های موسسه
|
||||
/// </summary>
|
||||
@@ -202,7 +215,12 @@ public class GetInstitutionContractListItemsViewModel
|
||||
public double Balance { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// رنگ بک گراند
|
||||
/// وضعیت قرارداد
|
||||
/// </summary>
|
||||
public KnownColor Color { get; set; }
|
||||
public InstitutionContractStatus Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا منقضی شده است
|
||||
/// </summary>
|
||||
public bool IsExpired { get; set; }
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
@@ -1002,25 +1003,26 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
public async Task<GetInstitutionContractListViewModel> GetList(InstitutionContractListSearchModel searchModel)
|
||||
{
|
||||
var query = _context.InstitutionContractSet
|
||||
.Include(x => x.ContactInfoList).AsSplitQuery();
|
||||
.Include(x => x.ContactInfoList);
|
||||
|
||||
var totalAmount = await query.Where(x => x.IsActiveString == "true").SumAsync(x => x.ContractAmount);
|
||||
|
||||
var totalDebt = await _context.FinancialStatments.Include(x => x.FinancialTransactionList)
|
||||
.Where(x => query.Select(i => i.ContractingPartyId).Contains(x.ContractingPartyId))
|
||||
.SumAsync(x => x.FinancialTransactionList.Sum(t => t.Deptor - t.Creditor));
|
||||
.Where(x => query.Where(q=>q.IsActiveString == "true" || q.IsActiveString == "blue").Select(i => i.ContractingPartyId).Contains(x.ContractingPartyId))
|
||||
.SelectMany(x => x.FinancialTransactionList)
|
||||
.SumAsync(x => x.Deptor - x.Creditor);
|
||||
|
||||
var joinedQuery = query.Join(_context.PersonalContractingParties
|
||||
.Include(x => x.Employers)
|
||||
.ThenInclude(x => x.WorkshopEmployers)
|
||||
.ThenInclude(x => x.Workshop),
|
||||
contract => contract.ContractingPartyId,
|
||||
contractingParty => contractingParty.id,
|
||||
(contract, contractingParty) => new { contract, contractingParty })
|
||||
.Join(_context.FinancialStatments.Include(x=>x.FinancialTransactionList),
|
||||
x =>x.contractingParty.id,
|
||||
statement =>statement.ContractingPartyId,
|
||||
(x, statement) => new {x.contractingParty,contract = x.contract,statement });
|
||||
.Include(x => x.Employers)
|
||||
.ThenInclude(x => x.WorkshopEmployers)
|
||||
.ThenInclude(x => x.Workshop),
|
||||
contract => contract.ContractingPartyId,
|
||||
contractingParty => contractingParty.id,
|
||||
(contract, contractingParty) => new { contract, contractingParty })
|
||||
.Join(_context.FinancialStatments.Include(x => x.FinancialTransactionList),
|
||||
x => x.contractingParty.id,
|
||||
statement => statement.ContractingPartyId,
|
||||
(x, statement) => new { x.contractingParty, x.contract, statement });
|
||||
|
||||
#region Search
|
||||
|
||||
@@ -1058,8 +1060,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
joinedQuery = joinedQuery.Where(x => x.contract.ContractAmount <= searchModel.AmountTo);
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(searchModel.ContractDateFrom) &&
|
||||
string.IsNullOrWhiteSpace(searchModel.ContractDateTo))
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.ContractDateFrom) &&
|
||||
!string.IsNullOrWhiteSpace(searchModel.ContractDateTo))
|
||||
{
|
||||
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateFrom))
|
||||
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
|
||||
@@ -1078,26 +1080,33 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
x.contract.ContractStartGr <= dateTo && x.contract.ContractEndGr <= dateFrom);
|
||||
}
|
||||
|
||||
//Todo: Search by Status For Tab
|
||||
var list = await joinedQuery.Skip(searchModel.PageIndex).Take(30).ToListAsync();
|
||||
|
||||
#endregion
|
||||
|
||||
var res = new GetInstitutionContractListViewModel()
|
||||
{
|
||||
TotalAmount = totalAmount,
|
||||
TotalDebt = totalDebt,
|
||||
Items = list.Select(x=>
|
||||
Items = list.Select(x =>
|
||||
{
|
||||
var workshops = x.contractingParty.Employers
|
||||
.SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).DistinctBy(w => w.id).ToList();
|
||||
|
||||
var employers = x.contractingParty.Employers.ToList();
|
||||
|
||||
var arc = workshops.Select(w => new
|
||||
{
|
||||
ArchiveCodeInt = w.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : w.ArchiveCode.ConvertToInt(),
|
||||
}).OrderBy(w => w.ArchiveCodeInt).ToList();
|
||||
var minArchiveCode = arc.Min(x => x.ArchiveCodeInt);
|
||||
var arc = workshops.Select(w =>
|
||||
w.ArchiveCode.Substring(0, 1) == "b"
|
||||
? 10000000
|
||||
: w.ArchiveCode.ConvertToInt()
|
||||
).OrderBy(w => w).ToList();
|
||||
|
||||
var minArchiveCode = arc.Count > 0 ? arc.Min(a => a) : 0;
|
||||
|
||||
var archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode;
|
||||
var status = SetContractStatus(x.contract.ContractEndGr, x.contract.ContractAmount,
|
||||
x.contract.IsActiveString);
|
||||
return new GetInstitutionContractListItemsViewModel()
|
||||
{
|
||||
ContractAmount = x.contract.ContractAmount,
|
||||
@@ -1106,23 +1115,63 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
ContractStartFa = x.contract.ContractStartGr.ToFarsi(),
|
||||
ContractEndFa = x.contract.ContractEndGr.ToFarsi(),
|
||||
ContractingPartyName = x.contract.ContractingPartyName,
|
||||
WorkshopNames = workshops.Select(w=>w.WorkshopFullName).ToList(),
|
||||
WorkshopNames = workshops.Select(w => w.WorkshopFullName).ToList(),
|
||||
RepresentativeName = x.contractingParty.RepresentativeFullName,
|
||||
HasSigniture = x.contract.Signature == "1",
|
||||
Id = x.contract.id,
|
||||
ContractNo = x.contract.ContractNo,
|
||||
ArchiveNo = archiveCode.ToString(),
|
||||
EmployeesCount = _context.LeftWorkList
|
||||
.Where(l=>workshops.Select(w=>w.id).Contains(l.id))
|
||||
.Count(l=>l.StartWorkDate<=DateTime.Now && l.LeftWorkDate>=DateTime.Now),
|
||||
EmployerNames = employers.Select(e=>e.FullName).ToList(),
|
||||
//Todo:FillColor
|
||||
.Where(l => workshops.Select(w => w.id).Contains(l.id))
|
||||
.Count(l => l.StartWorkDate <= DateTime.Now && l.LeftWorkDate >= DateTime.Now),
|
||||
EmployerNames = employers.Select(e => e.FullName).ToList(),
|
||||
Status = status.status,
|
||||
IsExpired = status.isExpiered
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
private (InstitutionContractStatus status, bool isExpiered) SetContractStatus(DateTime contractEndGr, double contractAmount,
|
||||
string isActiveString)
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
var nowFa = now.ToFarsi();
|
||||
var endFa = nowFa.FindeEndOfMonth();
|
||||
var endThisMontGr = endFa.ToGeorgianDateTime();
|
||||
InstitutionContractStatus status = InstitutionContractStatus.Active;
|
||||
bool isExpier = false;
|
||||
if (contractEndGr < now)
|
||||
{
|
||||
status = InstitutionContractStatus.Deactive;
|
||||
isExpier = true;
|
||||
}
|
||||
|
||||
if (contractEndGr >= now && contractEndGr <= endThisMontGr)
|
||||
{
|
||||
status = InstitutionContractStatus.PendingForRenewal;
|
||||
isExpier = true;
|
||||
}
|
||||
|
||||
if (contractAmount == 0)
|
||||
{
|
||||
status = InstitutionContractStatus.Free;
|
||||
if ((contractEndGr >= now && contractEndGr <= endThisMontGr) || (contractEndGr < now))
|
||||
{
|
||||
isExpier = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isActiveString == "blue")
|
||||
{
|
||||
status = InstitutionContractStatus.DeactiveWithDebt;
|
||||
isExpier = true;
|
||||
}
|
||||
|
||||
return (status, isExpier);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ServiceHost.BaseControllers;
|
||||
|
||||
namespace ServiceHost.Areas.Admin.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// کنترلر قرارداد های مالی موسسه
|
||||
/// </summary>
|
||||
public class institutionContractController : Controller
|
||||
public class institutionContractController : AdminBaseController
|
||||
{
|
||||
private readonly IInstitutionContractApplication _institutionContractApplication;
|
||||
|
||||
|
||||
@@ -27,15 +27,12 @@ using Microsoft.AspNetCore.CookiePolicy;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Diagnostics;
|
||||
|
||||
using Swashbuckle.AspNetCore.SwaggerUI;
|
||||
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
builder.WebHost.ConfigureKestrel(serverOptions =>
|
||||
{
|
||||
serverOptions.Limits.MaxRequestBodySize = long.MaxValue;
|
||||
});
|
||||
builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.Limits.MaxRequestBodySize = long.MaxValue; });
|
||||
|
||||
builder.Services.AddRazorPages()
|
||||
.AddRazorRuntimeCompilation();
|
||||
@@ -58,6 +55,7 @@ var connectionStringTestDb = builder.Configuration.GetConnectionString("TestDb")
|
||||
//builder.Services.AddSingleton<IMongoDatabase>(mongoDatabase);
|
||||
|
||||
#endregion
|
||||
|
||||
builder.Services.AddSingleton<IActionResultExecutor<JsonResult>, CustomJsonResultExecutor>();
|
||||
PersonalBootstrapper.Configure(builder.Services, connectionString);
|
||||
TestDbBootStrapper.Configure(builder.Services, connectionStringTestDb);
|
||||
@@ -142,15 +140,14 @@ builder.Services.AddAuthorization(options =>
|
||||
{
|
||||
options.AddPolicy("CameraArea",
|
||||
builder => builder.RequireClaim("AccountId"));
|
||||
|
||||
});
|
||||
|
||||
builder.Services.AddAuthorization(options =>
|
||||
{
|
||||
options.AddPolicy("AdminNewArea",
|
||||
builder => builder.RequireClaim("AccountId"));
|
||||
options.AddPolicy("AdminNewArea",
|
||||
builder => builder.RequireClaim("AdminAreaPermission", new List<string> { "true" }));
|
||||
options.AddPolicy("AdminNewArea",
|
||||
builder => builder.RequireClaim("AccountId"));
|
||||
options.AddPolicy("AdminNewArea",
|
||||
builder => builder.RequireClaim("AdminAreaPermission", new List<string> { "true" }));
|
||||
});
|
||||
|
||||
//services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||
@@ -176,15 +173,15 @@ builder.Services.AddControllers().AddJsonOptions(options =>
|
||||
builder.Services.AddRazorPages(options =>
|
||||
options.Conventions.AuthorizeAreaFolder("Admin", "/", "AdminArea"));
|
||||
builder.Services.AddRazorPages(options =>
|
||||
options.Conventions.AuthorizeAreaFolder("Client", "/", "ClientArea")).AddMvcOptions(options => options.Filters.Add<SecurityPageFilter>());
|
||||
options.Conventions.AuthorizeAreaFolder("Client", "/", "ClientArea"))
|
||||
.AddMvcOptions(options => options.Filters.Add<SecurityPageFilter>());
|
||||
builder.Services.AddRazorPages(options =>
|
||||
options.Conventions.AuthorizeAreaFolder("Camera", "/", "CameraArea"));
|
||||
builder.Services.AddRazorPages(options =>
|
||||
options.Conventions.AuthorizeAreaFolder("AdminNew", "/", "AdminNewArea"));
|
||||
options.Conventions.AuthorizeAreaFolder("AdminNew", "/", "AdminNewArea"));
|
||||
builder.Services.AddMvc();
|
||||
builder.Services.AddSignalR();
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region PWA
|
||||
@@ -203,56 +200,59 @@ builder.Services.AddSignalR();
|
||||
#endregion
|
||||
|
||||
#region Swagger
|
||||
|
||||
builder.Services.AddSwaggerGen(options =>
|
||||
{
|
||||
options.UseInlineDefinitionsForEnums();
|
||||
options.UseInlineDefinitionsForEnums();
|
||||
|
||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||
options.IncludeXmlComments(xmlPath);
|
||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||
options.IncludeXmlComments(xmlPath);
|
||||
|
||||
// Get XML comments from the class library
|
||||
var classLibraryXmlFile = "CompanyManagment.App.Contracts.xml";
|
||||
var classLibraryXmlPath = Path.Combine(AppContext.BaseDirectory, classLibraryXmlFile);
|
||||
options.IncludeXmlComments(classLibraryXmlPath);
|
||||
// Get XML comments from the class library
|
||||
var classLibraryXmlFile = "CompanyManagment.App.Contracts.xml";
|
||||
var classLibraryXmlPath = Path.Combine(AppContext.BaseDirectory, classLibraryXmlFile);
|
||||
options.IncludeXmlComments(classLibraryXmlPath);
|
||||
|
||||
|
||||
options.SwaggerDoc("General", new OpenApiInfo { Title = "API - General", Version = "v1" });
|
||||
options.SwaggerDoc("Admin", new OpenApiInfo { Title = "API - Admin", Version = "v1" });
|
||||
options.SwaggerDoc("Client", new OpenApiInfo { Title = "API - Client", Version = "v1" });
|
||||
options.SwaggerDoc("Camera", new OpenApiInfo { Title = "API - Camera", Version = "v1" });
|
||||
options.SwaggerDoc("General", new OpenApiInfo { Title = "API - General", Version = "v1" });
|
||||
options.SwaggerDoc("Admin", new OpenApiInfo { Title = "API - Admin", Version = "v1" });
|
||||
options.SwaggerDoc("Client", new OpenApiInfo { Title = "API - Client", Version = "v1" });
|
||||
options.SwaggerDoc("Camera", new OpenApiInfo { Title = "API - Camera", Version = "v1" });
|
||||
|
||||
options.DocInclusionPredicate((docName, apiDesc) => string.Equals(docName, apiDesc.GroupName, StringComparison.OrdinalIgnoreCase));
|
||||
options.DocInclusionPredicate((docName, apiDesc) =>
|
||||
string.Equals(docName, apiDesc.GroupName, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
|
||||
// اضافه کردن پشتیبانی از JWT در Swagger
|
||||
options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
||||
{
|
||||
Name = "Authorization",
|
||||
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
|
||||
Scheme = "Bearer",
|
||||
BearerFormat = "JWT",
|
||||
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
|
||||
Description = "لطفاً 'Bearer [space] token' را وارد کنید."
|
||||
});
|
||||
// اضافه کردن پشتیبانی از JWT در Swagger
|
||||
options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
||||
{
|
||||
Name = "Authorization",
|
||||
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
|
||||
Scheme = "Bearer",
|
||||
BearerFormat = "JWT",
|
||||
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
|
||||
Description = "لطفاً 'Bearer [space] token' را وارد کنید."
|
||||
});
|
||||
|
||||
options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
|
||||
{
|
||||
{
|
||||
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
||||
{
|
||||
Reference = new Microsoft.OpenApi.Models.OpenApiReference
|
||||
{
|
||||
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
|
||||
Id = "Bearer"
|
||||
}
|
||||
},
|
||||
Array.Empty<string>()
|
||||
}
|
||||
});
|
||||
options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
|
||||
{
|
||||
{
|
||||
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
||||
{
|
||||
Reference = new Microsoft.OpenApi.Models.OpenApiReference
|
||||
{
|
||||
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
|
||||
Id = "Bearer"
|
||||
}
|
||||
},
|
||||
Array.Empty<string>()
|
||||
}
|
||||
});
|
||||
|
||||
options.EnableAnnotations();
|
||||
options.EnableAnnotations();
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
#region CORS
|
||||
@@ -295,6 +295,7 @@ builder.Services.AddCors(options =>
|
||||
// .AllowCredentials();
|
||||
// });
|
||||
//});
|
||||
|
||||
#endregion
|
||||
|
||||
builder.Services.AddExceptionHandler<CustomExceptionHandler>();
|
||||
@@ -304,7 +305,6 @@ var app = builder.Build();
|
||||
app.UseCors("AllowSpecificOrigins");
|
||||
|
||||
|
||||
|
||||
#region Mahan
|
||||
|
||||
//app.UseStatusCodePagesWithRedirects("/error/{0}");
|
||||
@@ -319,21 +319,23 @@ if (builder.Environment.IsDevelopment())
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI(options =>
|
||||
{
|
||||
options.SwaggerEndpoint("/swagger/General/swagger.json", "API - General");
|
||||
options.SwaggerEndpoint("/swagger/Admin/swagger.json", "API - Admin");
|
||||
options.SwaggerEndpoint("/swagger/Client/swagger.json", "API - Client");
|
||||
options.SwaggerEndpoint("/swagger/Camera/swagger.json", "API - Camera");
|
||||
});
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI(options =>
|
||||
{
|
||||
options.DocExpansion(DocExpansion.None);
|
||||
options.SwaggerEndpoint("/swagger/General/swagger.json", "API - General");
|
||||
options.SwaggerEndpoint("/swagger/Admin/swagger.json", "API - Admin");
|
||||
options.SwaggerEndpoint("/swagger/Client/swagger.json", "API - Client");
|
||||
options.SwaggerEndpoint("/swagger/Camera/swagger.json", "API - Camera");
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
//Create Http Pipeline
|
||||
|
||||
#region Create Http Pipeline
|
||||
|
||||
|
||||
if (builder.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
@@ -352,7 +354,6 @@ app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
|
||||
@@ -361,13 +362,13 @@ app.UseStaticFiles();
|
||||
app.UseCookiePolicy();
|
||||
|
||||
|
||||
|
||||
#region Mahan
|
||||
|
||||
//app.UseLoginHandlerMiddleware();
|
||||
|
||||
//app.UseCheckTaskMiddleware();
|
||||
app.UseMiddleware<RazorJsonEnumOverrideMiddleware>();
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -377,6 +378,7 @@ app.MapHub<HolidayApiHub>("/trackingHolidayHub");
|
||||
app.MapHub<CheckoutHub>("/trackingCheckoutHub");
|
||||
app.MapRazorPages();
|
||||
app.MapControllers();
|
||||
|
||||
#endregion
|
||||
|
||||
app.Run();
|
||||
@@ -11,7 +11,7 @@
|
||||
},
|
||||
"ServiceHost": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"launchBrowser": false,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
|
||||
|
||||
Reference in New Issue
Block a user