Merge branch 'Feature/InstitutionContract/Create-Api' into Main
This commit is contained in:
@@ -88,6 +88,13 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
|
||||
/// <summary>
|
||||
/// تمدید قرارداد
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> ExtensionَAsync(CreateInstitutionContractRequest command);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -120,3 +127,7 @@ public class InstitutionContractStatusCount
|
||||
public InstitutionContractStatus Status { get; set; }
|
||||
public int Count { get; set; }
|
||||
}
|
||||
public class ExtenstionInstitutionContractRequest:EditInstitutionContractRequest
|
||||
{
|
||||
public long PreviousContractId { get; set; }
|
||||
}
|
||||
@@ -1151,7 +1151,21 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
|
||||
#endregion
|
||||
|
||||
var list = await joinedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
var endOfMonth = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));
|
||||
|
||||
var orderedQuery = joinedQuery
|
||||
.OrderBy(x =>
|
||||
x.contract.IsActiveString == "blue" ? 0 : // DeactiveWithoutDebt
|
||||
(x.contract.ContractEndGr >= now && x.contract.ContractEndGr <= endOfMonth) ? 1 : // PendingToRenewal
|
||||
x.contractingParty.IsBlock == "true" ? 2 : // Block
|
||||
x.contract.ContractAmount == 0 ? 3 : // Free
|
||||
!x.contractingParty.Employers
|
||||
.SelectMany(e => e.WorkshopEmployers)
|
||||
.Any() ? 4 : // WithoutWorkshop
|
||||
5 // Active
|
||||
);
|
||||
|
||||
var list = await orderedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
|
||||
var res = new PagedResult<GetInstitutionContractListItemsViewModel>()
|
||||
{
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using CompanyManagement.Infrastructure.Excel.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.Employer;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||
using CompanyManagment.App.Contracts.Representative;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using ServiceHost.BaseControllers;
|
||||
|
||||
namespace ServiceHost.Areas.Admin.Controllers;
|
||||
@@ -18,16 +22,20 @@ public class institutionContractController : AdminBaseController
|
||||
private readonly IPersonalContractingPartyApp _contractingPartyApplication;
|
||||
private readonly IContactInfoApplication _contactInfoApplication;
|
||||
private readonly IAccountApplication _accountApplication;
|
||||
private readonly IEmployerApplication _employerApplication;
|
||||
private readonly IWorkshopApplication _workshopApplication;
|
||||
|
||||
|
||||
public institutionContractController(IInstitutionContractApplication institutionContractApplication,
|
||||
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
|
||||
IAccountApplication accountApplication)
|
||||
IAccountApplication accountApplication, IEmployerApplication employerApplication, IWorkshopApplication workshopApplication)
|
||||
{
|
||||
_institutionContractApplication = institutionContractApplication;
|
||||
_contractingPartyApplication = contractingPartyApplication;
|
||||
_contactInfoApplication = contactInfoApplication;
|
||||
_accountApplication = accountApplication;
|
||||
_employerApplication = employerApplication;
|
||||
_workshopApplication = workshopApplication;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -344,6 +352,262 @@ public class institutionContractController : AdminBaseController
|
||||
});
|
||||
}
|
||||
|
||||
public ActionResult<EditInstitutionContract> OnGetExtension(long id)
|
||||
{
|
||||
var todayGr = DateTime.Now;
|
||||
var todayFa = todayGr.ToFarsi();
|
||||
var previusContract = _institutionContractApplication.GetDetails(id);
|
||||
var previusContractEnd = previusContract.ContractEndGr.AddDays(1);
|
||||
var startFa = previusContractEnd.ToFarsi();
|
||||
var endFa = startFa.FindeEndOfYear();
|
||||
|
||||
|
||||
var representativList = new List<RepresentativeViewModel>();
|
||||
var contractingPartyList = new List<PersonalContractingPartyViewModel>();
|
||||
var res = _institutionContractApplication.GetDetails(id);
|
||||
var representative = new RepresentativeViewModel
|
||||
{
|
||||
Id = res.RepresentativeId,
|
||||
FullName = res.RepresentativeName
|
||||
};
|
||||
representativList.Add(representative);
|
||||
var contractingParty = new PersonalContractingPartyViewModel
|
||||
{
|
||||
id = res.ContractingPartyId,
|
||||
FullName = _contractingPartyApplication.GetFullName(res.ContractingPartyId)
|
||||
};
|
||||
contractingPartyList.Add(contractingParty);
|
||||
res.RepresentativeSelectList =
|
||||
new SelectList(representativList, "Id", "FullName");
|
||||
res.ContractingPartiesSelectList =
|
||||
new SelectList(contractingPartyList, "id", "FullName");
|
||||
|
||||
var employer = _employerApplication.GetEmployerByContracrtingPartyID(res.ContractingPartyId);
|
||||
var emplId = employer.Select(x => x.Id).ToList();
|
||||
|
||||
var w = _workshopApplication.GetWorkshopsByEmployerId(emplId);
|
||||
var workshopIds = w.Select(x => x.Id).ToList();
|
||||
var workshopCount = Convert.ToString(w.Count);
|
||||
|
||||
var pCount = 0;
|
||||
if (workshopIds.Count > 0)
|
||||
{
|
||||
foreach (var workshopId in workshopIds)
|
||||
{
|
||||
var p = _workshopApplication.PersonnelCount(workshopId);
|
||||
pCount += p;
|
||||
}
|
||||
|
||||
res.EmployeeCount = Convert.ToString(pCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
res.EmployeeCount = "0";
|
||||
}
|
||||
|
||||
|
||||
//var left = _leftWorkApplication.GetLeftPersonelByWorkshopId(workshopIds);
|
||||
|
||||
res.WorkshopCount = workshopCount;
|
||||
|
||||
res.WorkshopManualCount = workshopCount;
|
||||
res.EmployeeManualCount = res.EmployeeCount;
|
||||
|
||||
res.ContractDateFa = todayFa;
|
||||
res.ContractStartFa = startFa;
|
||||
res.ContractEndFa = endFa;
|
||||
res.ContractAmountString = "0";
|
||||
res.DailyCompenseationString = "0";
|
||||
res.ObligationString = "0";
|
||||
res.TotalAmountString = "0";
|
||||
res.PrviousContractId = id;
|
||||
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(res.EmployeeManualCount))
|
||||
{
|
||||
var countPerson = Convert.ToInt32(res.EmployeeCount);
|
||||
var finalAmount = _institutionContractApplication.GetcontractAmount(countPerson);
|
||||
|
||||
var syear = Convert.ToInt32(startFa.Substring(0, 4));
|
||||
var smonth = Convert.ToInt32(startFa.Substring(5, 2));
|
||||
var sday = Convert.ToInt32(startFa.Substring(8, 2));
|
||||
|
||||
|
||||
var eyear = Convert.ToInt32(endFa.Substring(0, 4));
|
||||
var emonth = Convert.ToInt32(endFa.Substring(5, 2));
|
||||
var eday = Convert.ToInt32(endFa.Substring(8, 2));
|
||||
emonth += 1;
|
||||
|
||||
var def = (eyear - syear) * 12 + emonth - smonth;
|
||||
|
||||
|
||||
//رند ماهیانه
|
||||
//int rightMDigits = (int)(finalAmount % 1000000);
|
||||
//if (rightMDigits < 500000)
|
||||
//{
|
||||
// finalAmount = (int)(finalAmount / 100000) * 100000;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// finalAmount = (int)(finalAmount / 100000 + 1) * 100000;
|
||||
//}
|
||||
finalAmount = (int)(finalAmount / 1000000) * 1000000;
|
||||
|
||||
double compute = 0;
|
||||
double tenPercent = 0;
|
||||
if (res.HasValueAddedTax == "true")
|
||||
{
|
||||
tenPercent = finalAmount * 10 / 100;
|
||||
res.ContractAmountOAlone = finalAmount.ToMoney();
|
||||
|
||||
//افزودن 10 درصد
|
||||
finalAmount += tenPercent;
|
||||
res.ContractAmountString = finalAmount.ToMoney();
|
||||
res.ValueAddedTaxStr = tenPercent.ToMoney();
|
||||
compute = finalAmount * def;
|
||||
res.ObligationString = compute.ToMoney();
|
||||
res.TotalAmountString = res.ObligationString;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.ContractAmountOAlone = finalAmount.ToMoney();
|
||||
res.ContractAmountString = res.ContractAmountOAlone;
|
||||
res.ValueAddedTaxStr = "0";
|
||||
compute = finalAmount * def;
|
||||
res.ObligationString = compute.ToMoney();
|
||||
res.TotalAmountString = res.ObligationString;
|
||||
}
|
||||
|
||||
|
||||
//رند سالانه
|
||||
|
||||
//int rightYDigits = (int)(compute % 10000000);
|
||||
//if (rightYDigits < 5000000)
|
||||
|
||||
//compute = (int)(compute / 1000000) * 1000000;
|
||||
}
|
||||
|
||||
var contactInfo = _contactInfoApplication.GetContactInfolist(id);
|
||||
if (contactInfo.Count > 0)
|
||||
{
|
||||
res.ContactInfoCounter = contactInfo.Count;
|
||||
res.ContactInformationList = contactInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.ContactInfoCounter = 0;
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<ActionResult<OperationResult>> OnPostExtension(ExtenstionInstitutionContractRequest command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
|
||||
var phoneNumber = command.ContactInfos.FirstOrDefault(x =>
|
||||
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
|
||||
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
|
||||
|
||||
if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode))
|
||||
return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد"));
|
||||
if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId))
|
||||
return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد"));
|
||||
if(phoneNumber == null)
|
||||
return new JsonResult(op.Failed("تعیین شماره همراه با سمت طرف قرارداد اجباریست"));
|
||||
|
||||
|
||||
var counter = command.ContactInfos.Count;
|
||||
|
||||
var result = await _institutionContractApplication.ExtensionَAsync(command);
|
||||
|
||||
if (result.IsSuccedded && counter > 0)
|
||||
{
|
||||
for (var i = 0; i <= counter - 1; i++)
|
||||
{
|
||||
if (command.ContactInfos[i].PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = result.SendId,
|
||||
PhoneType = command.ContactInfos[i].PhoneType,
|
||||
Position = command.ContactInfos[i].Position,
|
||||
PhoneNumber = command.ContactInfos[i].PhoneNumber,
|
||||
FnameLname = command.ContactInfos[i].FnameLname,
|
||||
SendSms = command.ContactInfos[i].SendSmsString == "true" ? true : false
|
||||
};
|
||||
_contactInfoApplication.Create(contactinfo);
|
||||
}
|
||||
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (result.IsSuccedded)
|
||||
{
|
||||
_institutionContractApplication.DeActive(command.PreviousContractId);
|
||||
_institutionContractApplication.ReActiveAllAfterCreateNew(command.ContractingPartyId);
|
||||
}
|
||||
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
|
||||
|
||||
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
|
||||
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
|
||||
if (result.IsSuccedded && counter > 0)
|
||||
{
|
||||
|
||||
if (getOldContarct.Count > 0)
|
||||
{
|
||||
foreach (var item in getOldContarct)
|
||||
{
|
||||
_contactInfoApplication.RemoveContactInfo(item.Id);
|
||||
foreach (var phone in command.ContactInfos)
|
||||
{
|
||||
if (phone.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = item.Id,
|
||||
PhoneType = phone.PhoneType,
|
||||
Position = phone.Position,
|
||||
PhoneNumber = phone.PhoneNumber,
|
||||
FnameLname = phone.FnameLname,
|
||||
SendSms = phone.SendSmsString == "true" ? true : false
|
||||
};
|
||||
_contactInfoApplication.Create(contactinfo);
|
||||
}
|
||||
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
//ساخت اکانت کلاینت
|
||||
var userPass = conractingParty.IsLegal == "حقیقی"
|
||||
? conractingParty.Nationalcode
|
||||
: conractingParty.NationalId;
|
||||
var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass);
|
||||
if (!checkExistAccount)
|
||||
{
|
||||
|
||||
var createAcc = new RegisterAccount
|
||||
{
|
||||
Fullname = conractingParty.LName,
|
||||
Username = userPass,
|
||||
Password = userPass,
|
||||
Mobile = phoneNumber.PhoneNumber,
|
||||
NationalCode = userPass
|
||||
};
|
||||
var res = _accountApplication.RegisterClient(createAcc);
|
||||
if (res.IsSuccedded)
|
||||
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دانلود اکسل
|
||||
@@ -359,4 +623,5 @@ public class institutionContractController : AdminBaseController
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
$"قرارداد های مالی.xlsx");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user