From 24501df6158a384ee40ee1c6c8017712c4dcb1f7 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 12:50:19 +0330 Subject: [PATCH 1/9] sepration js and css for workshop and account --- .../Admin/Pages/Accounts/Account/Index.cshtml | 249 +--- .../Pages/Company/Workshops/Index.cshtml | 1177 +---------------- ServiceHost/Properties/launchSettings.json | 2 +- ServiceHost/ServiceHost.csproj | 1 + .../AssetsAdmin/page/Account/js/Index.js | 169 +++ .../AssetsAdmin/page/Workshop/css/Index.css | 471 +++++++ .../AssetsAdmin/page/Workshop/js/Index.js | 733 ++++++++++ 7 files changed, 1395 insertions(+), 1407 deletions(-) create mode 100644 ServiceHost/wwwroot/AssetsAdmin/page/Account/js/Index.js create mode 100644 ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/Index.css create mode 100644 ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/Index.js diff --git a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml index 92dca681..45e5993d 100644 --- a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml @@ -11,6 +11,7 @@ var j = 1; var r = 1; var permissionList = _AuthHelper.GetPermissions(); + string adminVersion = _0_Framework.Application.Version.AdminVersion; //string colaps = "in"; //string act = "active"; } @@ -552,250 +553,20 @@ - +@* *@ + + - - }); - function directLogin(id) { - - - $.ajax({ - async: false, - dataType: 'json', - type: 'POST', - url: '@Url.Page("./Index", "LoginToClient")', - headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() }, - data: { "id": id }, - success: function (response) { - if (response.isSuccess) { - window.location.href = "/Client"; - } else { - $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', "خطا در ورود به اکانت"); - } - } - }); - } - - - - - - - - - } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml index 4a82840a..1c807856 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml @@ -2,445 +2,18 @@ @model ServiceHost.Areas.Admin.Pages.Company.Workshops.IndexModel @{ - //string colaps = "in"; - //string act = "active"; - int i = 1; - -} -@{ - //Layout = "~/Pages/Shared/_Layout.cshtml"; Layout = "Shared/_AdminLayout"; ViewData["title"] = "کارگاه"; string employerList = ""; var selctedOption = "selectedOption"; - - @*select2 css start*@ - } + @section Styles { @@ -962,745 +535,15 @@ var deActive = '@Url.Page("./index", "DeActive")'; var workshopNameAjax = '@Url.Page("./Index", "WorkshopName")'; var employerNameAjax = '@Url.Page("./Index", "EmployerName")'; + var deleteWorkshopAjaxUrl = '@Url.Page("./Index", "DeleteWorkshop")'; + var activeWorkshopAjaxUrl = '@Url.Page("./Index", "ActiveWorkshop")'; + var printListWorkshopUrl = '#showmodal=@Url.Page("/Company/Workshops/Index", "PrintListWorkshop")'; - - $('#ddlState').val(state); - iranwebsv2(state); - if (state != "") { - $("#city2 option").each(function() { - if ($(this).text() == city) { - $(this).attr('selected', 'selected'); - } - }); - } else { - var option = new Option("شهرستان", 0); - $("#city2").append(option); - $("#city2").trigger("change"); - } - }); - - - - - - - - - } diff --git a/ServiceHost/Properties/launchSettings.json b/ServiceHost/Properties/launchSettings.json index d7381591..fd650415 100644 --- a/ServiceHost/Properties/launchSettings.json +++ b/ServiceHost/Properties/launchSettings.json @@ -19,7 +19,7 @@ "sqlDebugging": true, "dotnetRunMessages": "true", "nativeDebugging": true, - "applicationUrl": "https://localhost:5004;http://localhost:5003;https://192.168.0.117:5006", + "applicationUrl": "https://localhost:5004;http://localhost:5003", "jsWebView2Debugging": false, "hotReloadEnabled": true }, diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index fe4fb60e..0e50c2f1 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -109,6 +109,7 @@ + diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Account/js/Index.js b/ServiceHost/wwwroot/AssetsAdmin/page/Account/js/Index.js new file mode 100644 index 00000000..0f81c3c3 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Account/js/Index.js @@ -0,0 +1,169 @@ + +$(document).ready(function () { + $(".select-city").select2({ + language: "fa", + dir: "rtl" + }); +}) +$(document).ready(function () { + $('#datatable').dataTable({ + "lengthMenu": [[25, 10, 50, 100, -1], [25, 10, 50, 100, "All"]] + }); + +}); + +$(document).ready(function () { + $('#datatable2').dataTable( + { + "lengthMenu": [[50, 25, 10, 100, -1], [50, 25, 10, 100, "All"]] + }); +}); +$(document).ready(function () { + $('#datatable3').dataTable( + { + "lengthMenu": [[25, 10, 50, 100, -1], [25, 10, 50, 100, "All"]] + }); +}); + +$("#myTab a").click(function (e) { + e.preventDefault(); + $(this).tab('show'); + +}); + +$("#myTab2 a").click(function (e) { + e.preventDefault(); + $(this).tab('show'); + +}); +$("#myTab3 a").click(function (e) { + e.preventDefault(); + $(this).tab('show'); + + +}); +// store the currently selected tab in the hash value +$("ul.nav-tabs > li > a").on("shown.bs.tab", + function (e) { + var id = $(e.target).attr("href").substr(1); + window.location.hash = id; + }); + +// on load of the page: switch to the currently selected tab +var hash = window.location.hash; +$('#myTab a[href="' + hash + '"]').tab('show', 'active'); +var hash2 = window.location.hash; +$('#myTab2 a[href="' + hash2 + '"]').tab('show', 'active'); + +var hash2 = window.location.hash; +$('#myTab2 a[href="' + hash2 + '"]').tab('show', 'active'); +$('.activer').on('change', + function (e) { + e.preventDefault(); + $('.search').click(); + + }); +function directLogin(id) { + + + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: directLoginUrl, + headers: { "RequestVerificationToken": antiforgeryToken }, + data: { "id": id }, + success: function (response) { + if (response.isSuccess) { + window.location.href = "/Client"; + } else { + $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', "خطا در ورود به اکانت"); + } + } + }); +} + + +function deActive(id, accountName) { + + let alarm = 'آیا از غیرفعال کردن ' + accountName + ' اطمینان دارید؟ ' + ' '; + swal({ + title: alarm, + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بله", + cancelButtonText: "خیر", + closeOnConfirm: true, + closeOnCancel: true + }, + function (isConfirm) { + if (isConfirm) { + deActiveAjax(id); + } + }); + + +} + + +function deActiveAjax(id) { + $('.sweet-alert').removeClass("successSwall"); + $('.sweet-alert').removeClass("errorSwall"); + $.ajax({ + async: false, + dataType: 'json', + type: 'GET', + url: deActiveAjaxUrl, + headers: { "RequestVerificationToken": antiforgeryToken }, + data: { "id": id }, + success: function (response) { + if (response.isSuccedded) { + window.location.reload(); + } + } + }); +} + + +function Active(id, accountName) { + + let alarm = 'آیا از غیرفعال کردن ' + accountName + ' اطمینان دارید؟ ' + ' '; + swal({ + title: alarm, + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بله", + cancelButtonText: "خیر", + closeOnConfirm: true, + closeOnCancel: true + }, + function (isConfirm) { + if (isConfirm) { + ActiveAjax(id); + } + }); + + +} + +function ActiveAjax(id) { + $('.sweet-alert').removeClass("successSwall"); + $('.sweet-alert').removeClass("errorSwall"); + $.ajax({ + async: false, + dataType: 'json', + type: 'GET', + url: activeAjaxUrl, + headers: { "RequestVerificationToken": antiforgeryToken }, + data: { "id": id }, + success: function (response) { + if (response.isSuccedded) { + window.location.reload(); + } + } + }); +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/Index.css b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/Index.css new file mode 100644 index 00000000..0e8c62ea --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/Index.css @@ -0,0 +1,471 @@ + +.operationBtns { + display: flex; + justify-content: end; +} + +.hidden { + display: none !important; +} + +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 15px; + padding-left: 15px; +} + +#datatable .tooltip { + font-size: 10px; +} + +#datatable thead .sorting:after, #datatable thead .sorting_asc:after, #datatable thead .sorting_desc:after { + display: none; +} + +#datatable thead > tr > th { + padding-left: 0px; + padding-right: 0px; + text-align: center; + font-size: 14px; +} + +#datatable > tbody > tr > td { + padding: 5px; + position: relative; + font-size: 12px; +} + +#datatable tr:nth-child(odd) td:nth-child(3) { + background-color: #bed3ca87; +} + +#datatable tr:nth-child(even) td:nth-child(3) { + background-color: #b0c1ba36; +} + +.text-nowrap { + white-space: nowrap !important; + overflow-x: visible; +} + +.tooltip-inner { + max-width: 300px; +} + +.btn-table { + margin: 0 5px; + border-radius: 8px; + padding: 4px 8px 2px 8px; + box-shadow: 0 0 6px 0px #838383; + font-size: 20px; +} + + .btn-table i { + transform: translate(0, 1px); + font-size: 22px !important; + } + +.tooltip-container { + cursor: pointer; + position: relative; +} + +.tooltip2-container { + cursor: pointer; + position: relative; + display: inline-block; +} + +.tooltip { + opacity: 0; + z-index: 99; + color: #fff; + width: 220px; + display: block; + font-size: 14px; + font-family: 'IranSans'; + padding: 5px 10px; + border-radius: 3px; + text-align: center; + background: #e67e22; + border: 1px solid #e67e22; + box-shadow: 0 0 3px rgba(0,0,0,0.5); + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + position: absolute; + right: -50px; + bottom: 40px; +} + + .tooltip:before, .tooltip:after { + content: ''; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid #e67e22; + position: absolute; + bottom: -10px; + left: 70%; + } + +.tooltip-container:hover .tooltip, a:hover .tooltip { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.tooltipfull { + opacity: 0; + z-index: 99; + color: #fff; + display: block; + font-size: 12px; + font-family: 'IranSans'; + padding: 5px 10px; + border-radius: 15px; + text-align: center; + background: #4e5a52; + border: 1px solid #4e5a52; + box-shadow: 0 0 3px rgba(0,0,0,0.5); + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + position: absolute; + right: -2px; + bottom: 30px; + white-space: nowrap; +} + + .tooltipfull span { + line-height: 1.3; + } + + .tooltipfull:before, .tooltipfull:after { + content: ''; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid #4e5a52; + position: absolute; + bottom: -10px; + left: 50%; + transform: translateX(-9px) translateY(-1.5px) scale(0.5); + } + +.tooltipfull-containerText:hover .tooltipfull, a:hover .tooltipfull { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.loc-full { + white-space: nowrap !important; + max-width: 5rem; + overflow-x: hidden; + text-overflow: ellipsis; +} + +.state-full { + max-width: 5rem; +} + +.loc-box { + display: flex; + box-shadow: 0px 0px 6px 3px inset #44665e63; + padding: 6px 0px; + border-radius: 10px; +} + +.mobile-view { + display: none; +} + +.screen-view { + display: flex; +} + +.fulltext { + opacity: 0; + white-space: nowrap; +} + +.ellipsed { + display: block; + width: 100%; + text-overflow: ellipsis; + overflow-x: clip; + white-space: nowrap; +} + +.name-td { + max-width: 155px; + position: relative; +} + +.address-td { + max-width: 100px; + position: relative; +} + +.city-td { + max-width: 30px; +} + +.code-td { + max-width: 50px; +} + +.tooltipfull-containerText { + cursor: pointer; + position: absolute; + display: inline-block; + right: 9px; + top: 13px; +} + +.oper { + max-width: 200px; +} + +@media(max-width: 1550px) { + .fulltext { + max-width: 20rem; + } + + .btn-table { + font-size: 18px; + } + + .fulltext { + max-width: 22rem; + } +} + +@media(max-width: 1440px) { + .fulltext { + max-width: 12rem; + } + + .btn-table { + font-size: 14px; + } + + .oper { + max-width: 300px; + } + + #datatable thead > tr > th { + font-size: 10px; + } + + #datatable > tbody > tr > td { + font-size: 11px; + } + + .code-td { + max-width: 65px; + } + + .fulltext { + max-width: 21rem; + } +} + +/*.errorSwall .confirm, .warningSwall .confirm { + display: unset !important; + }*/ +.address-flex { + display: flex; + padding: 0; +} + +@media(max-width: 768px) { + .mobile-view { + display: block; + padding-top: 10px; + } + + .screen-view { + display: none; + } + + .panel-body .form-control { + font-size: 12px; + } + + .oper { + max-width: 45px; + } + + .xs-middle { + display: flex; + column-gap: 4px; + } + + .xs-middle .btn-rounded { + padding: 6px 5px; + font-size: 10px; + } + + .xs-middle .btn-rounded i { + font-size: 10px !important; + } + + .right-one { + padding-left: 0; + } + + .middle-one { + padding: 0; + } + + .left-one { + padding-right: 0; + } +} + +.btn-print { + background: #cbd5e1; + border: none; + border-radius: 4px; + padding: 3px 10px; + color: #1e293b; + transition: all .3s ease +} + + .btn-print:hover { + background: #94a3b8; + } + + + + +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #dfdfdf; + border-radius: 5px; +} + +::-webkit-scrollbar-thumb { + background: #bed3ca; + border-radius: 5px; +} + +.opt { + background-color: #cae3d8; + border-radius: 10px; + text-align: right; + padding: 2px 5px; + text-overflow: ellipsis; + overflow-x: hidden; + width: 100%; +} + +.noResult { + background-color: #cce5da; + border-radius: 10px; + text-align: right; + padding: 2px 5px; +} + + .opt:hover, .noResult:hover { + background-color: #bed3ca !important; + color: #343434 !important; + } + +.selectDiv { + position: relative; + z-index: 2; + border-radius: 10px; + min-height: 20px; + max-height: 190px; + overflow: hidden scroll; + width: 100%; + background-color: rgb(255 255 255); + display: block; + box-shadow: 0px -1px 12px 0px rgba(0,0,0,.16), 2px 1px 10px 0 rgba(0,0,0,.12); +} + +.selectedOption { + color: #6f7072 !important; + background-color: #d2f5e6 !important; +} + +.keyboardSelected { + color: #424242 !important; + background-color: #93c7b0 !important; +} + +.bgGray, .bgGray:hover { + background-color: #b5b5b5 !important; + color: #646464; +} + +a.disabled { + pointer-events: none; + cursor: default; + background-color: grey !important; + border-color: grey !important; +} + +.custom-btn-technical { + background: #5893D4; + box-shadow: 0 0 3px 0 #5893D4; + border: 1px solid #5893D4; + transition: all .2s ease-in; +} + + .custom-btn-technical:hover { + background: #366AA4; + box-shadow: 0 0 3px 0 #366AA4; + border: 1px solid #366AA4; + } + +.select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: left; + font-weight: 700; + margin-top: 5px; + margin-right: 10px; + padding: 1px; + font-size: 14px; + background: #f87171; + color: #fff; + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 60px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #1e9e9e; + border: 1px solid #0b7878; + color: #fff; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #fff; +} + diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/Index.js b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/Index.js new file mode 100644 index 00000000..4d086506 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/Index.js @@ -0,0 +1,733 @@ + +$(document).ready(function () { + $('#datatable').dataTable({ + "lengthMenu": [[25, 10, 50, 100, -1], [25, 10, 50, 100, "All"]] + //"autoWidth" :false + }); + let state = $('#SearchModel_State').val(); + let city = $('#SearchModel_City').val(); + + console.log(state); + console.log(city); + + + $('#ddlState').val(state); + iranwebsv2(state); + if (state != "") { + $("#city2 option").each(function () { + if ($(this).text() == city) { + $(this).attr('selected', 'selected'); + } + }); + } else { + var option = new Option("شهرستان", 0); + $("#city2").append(option); + $("#city2").trigger("change"); + } + +}); + + +$(document).ready(function () { + //$('#datatable2').dataTable({ + // "lengthMenu": [[25, 10, 50, 100, -1], [25, 10, 50, 100, "All"]] + //}); + + + $("#closeModal").click(function () { $('#MainModal').modal('hide'); }) + const $modal = $('#MainModal'); + const $fixedDiv = $('.printBtns'); + + $modal.on('show.bs.modal', + function () { + if ($('#printThis').length) { + $fixedDiv.addClass('visible'); + $fixedDiv.removeClass('hidden'); + } + }); + + $modal.on('hidden.bs.modal', + function () { + $fixedDiv.removeClass('visible'); + $fixedDiv.addClass('hidden'); + }); +}); + +function deActiveWorkshop(Id) { + let u2 = '&id=' + Id; + let url = showPersonnelList; + var showList = url + u2; + $('.sweet-alert').removeClass("successSwall"); + $('.sweet-alert').removeClass("errorSwall"); + swal({ + title: "آیا حذف کارگاه انتخاب شده اطمینان دارید؟", + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بله", + cancelButtonText: "خیر", + closeOnConfirm: false, + closeOnCancel: true + }, + function (isConfirm) { + if (isConfirm) { + + $.ajax({ + async: false, + url: deActive, + type: "Get", + dataType: 'json', + data: { "id": Id }, + success: function (response) { + + if (response.sucsses) { + $('#datatable tbody tr').each(function (i) { + if ($(this).attr("data-workshopId") == Id) { + $(this).remove(); + } + }); + swal({ + title: response.message, + text: "", + type: "success", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بستن", + //cancelButtonText: "خیر", + closeOnConfirm: true, + customClass: "successSwall" + }); + } else { + swal({ + title: response.message, + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "لیست پرسنل", + cancelButtonText: "انصراف", + closeOnConfirm: true, + closeOnCancel: true, + customClass: "errorSwall" + }, + function (isConfirm) { + if (isConfirm) { + window.location.href = showList; + + } + }); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); //endOf Ajax + } + }); + // $(".deactivation-"+id).click(); +} + + +if ($('#datatable tbody tr .employee-operations').length > 0) { + $(window).on('resize', + function () { + if ($(window).width() < 768) { + locateButtonContainerMobile(); + } + if ($(window).width() > 768) { + locateButtonContainer(); + } + }); + $(document).on("click", + function (event) { + var target = $(event.target); + if (!target.closest(".buttons-container").length && !target.is(".employee-operations") && !target.is("#personelList") && !target.is("#personelList *") && !target.is("#createWorkshop") && !target.is("#createWorkshop *") && !target.is("#details") && !target.is("#details *") && !target.is("#editWorkshop") && !target.is("#editWorkshop *") + ) { + $(".buttons-container").removeClass("active").addClass("reverse"); + $(".more-buttons").removeClass("active"); + setTimeout(function () { + $(".buttons-container").removeClass("reverse").css("display", "none"); + }, + 200); + } + }); + $(".employee-operations").on("click", + function () { + if ($(window).width() < 768) { + locateButtonContainerMobile(); + } + if ($(window).width() > 768) { + locateButtonContainer(); + } + var buttonsContainer = $(this).next(".buttons-container"); + if (buttonsContainer.hasClass("active")) { + buttonsContainer.removeClass("active").addClass("reverse"); + $(this).closest(".more-buttons").removeClass("active"); + setTimeout(function () { + buttonsContainer.removeClass("reverse").css("display", "none"); + }, + 200); + } else { + buttonsContainer.removeClass("reverse").addClass("active").css("display", "flex"); + $(this).closest(".more-buttons").addClass("active"); + } + + $(".buttons-container").not(buttonsContainer).removeClass("active reverse").css("display", "none"); + $(".more-buttons").not($(this).closest(".more-buttons")).removeClass("active"); + }); +} + +function locateButtonContainer() { + var beforePosition = $(".screen-view .employee-operations").position(); + var containerWidth = $('.screen-view .buttons-container').outerWidth(); + var containerHeight = $('.screen-view .buttons-container').outerHeight(); + var containerLeft = beforePosition.left + $(".screen-view .employee-operations").outerWidth() + 20; + var containerTop = beforePosition.top + ($(".screen-view .employee-operations").outerHeight() / 2) - (containerHeight / 2); + $('.screen-view .buttons-container').css({ + left: containerLeft, + top: containerTop + }); +} + +function locateButtonContainerMobile() { + var beforePosition = $(".mobile-view .employee-operations").position(); + var containerWidth = $('.mobile-view .buttons-container').outerWidth(); + var containerHeight = $('.mobile-view .buttons-container').outerHeight(); + var containerLeft = beforePosition.left + $(".mobile-view .employee-operations").outerWidth() + 25; + var containerTop = beforePosition.top + ($(".mobile-view .employee-operations").outerHeight() / 2) - (containerHeight / 2); + $('.mobile-view .buttons-container').css({ + left: containerLeft, + top: containerTop + }); +} + + + +//------workshop----- +var containerWorkshop = $('#empWorkshop'); +var searchBoxWorkshop = $('#empSearchWorkshop'); +var hiddenInputValWorkshop = $('.sendWorkshopId'); +var searchResulWorkshop = $('.searchResultWorkshop'); +var mixContainerAndSerchResultWorkshop = $('#empWorkshop , .searchResultWorkshop'); + +containerWorkshop.hide(); +var liListWorkshop; +var liPointerWorkshop; +let countWorkshop = 0; + +//close search Employee when click on body +$(document).on('click', + function (event) { + if (!$(event.target).closest(containerWorkshop).length) { + containerWorkshop.hide(); + } + }); + +//select option by mouse +function selectItemWorkshop(id, employeeFullName) { + searchBoxWorkshop.val(employeeFullName); + hiddenInputValWorkshop.val(id); + containerWorkshop.hide(); + searchBoxWorkshop.addClass("selectedOption"); +}; + +//search by Ajax +searchBoxWorkshop.on('keyup keypress', + function (e) { + $(".form-control").removeClass("selectedOption"); + // $("#empSearchContractingPartyID").val(''); + // $("#SearchModel_ContactingPartyName").val(''); + + + if ($(this).val() == '') { + $("#SearchModel_Id").val("0"); + $("#SearchModel_WorkshopFullName").val(''); + } + //stop submit form with enter + var keyCode = e.keyCode || e.which; + if (keyCode === 13) { + e.preventDefault(); + if (countWorkshop > 0 && countWorkshop <= liListWorkshop.length) { + liPointerWorkshop.click(); + } + return false; + } + searchBoxWorkshop.removeClass("selectedOption"); + let searchText = $(this).val(); + hiddenInputValWorkshop.val(0); + + if (searchText.length > 1) { + + $.ajax({ + async: false, + contentType: 'charset=utf-8', + dataType: 'json', + type: 'GET', + url: workshopNameAjax, + data: { "searchText": searchText }, + headers: { "RequestVerificationToken": antiforgeryToken }, + + success: function (response) { + $(".opt").remove(); + if (response.mylist.length > 0) { //result Founded + + console.log(response.mylist); + + $(".noResult").remove(); + containerWorkshop.show(); + $.each(response.mylist, + function (i, item) { + let li = `
  • `; + li = li + ' ' + item.workshopFullName + ' | ' + item.archiveCode + '
  • '; + searchResulWorkshop.append(li); + + }); + } else { //result NotFounded + + $(".noResult").remove(); + containerWorkshop.show(); + let noResult = `
  • نتیجه ای یافت نشد
  • `; + searchResulWorkshop.append(noResult); + } + } // endOfSuccess + + }); //endOfAjax + + } else { + containerWorkshop.hide(); + countWorkshop = 0; + } + //keyboard Arrow Key Select And Enter + liListWorkshop = $('#empWorkshop ul li'); + mixContainerAndSerchResultWorkshop.animate({ + scrollTop: $(liListWorkshop.eq(0)).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop() + }, + 50); + if (e.which === 40) { // if ArrowUp + if (countWorkshop > 0 && countWorkshop <= liListWorkshop.length) { + + liPointerWorkshop.removeClass('keyboardSelected'); + console.log(countWorkshop + "plusOne"); + liListWorkshop.eq(countWorkshop).addClass('keyboardSelected'); + liPointerWorkshop = liListWorkshop.eq(countWorkshop); + if (countWorkshop > 4) { + //ScrollDown + mixContainerAndSerchResultWorkshop.animate({ + scrollTop: $(liPointerWorkshop).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop() + }, + 50); + } + countWorkshop += 1; + + } else { + + liListWorkshop.eq(0).addClass("keyboardSelected"); + liPointerWorkshop = liListWorkshop.eq(0); + countWorkshop = 1; + } + } else if (e.which === 38) { //if ArrowDown + if (countWorkshop > 0 && countWorkshop <= liListWorkshop.length) { + liPointerWorkshop.removeClass('keyboardSelected'); + countWorkshop -= 1; + liListWorkshop.eq(countWorkshop).addClass('keyboardSelected'); + liPointerWorkshop = liListWorkshop.eq(countWorkshop); + //ScrollUp + mixContainerAndSerchResultWorkshop.animate({ + scrollTop: $(liPointerWorkshop).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop() + }, + 50); + } + } + }); + + +$("#empSearchWorkshop").keypress(function (event) { + $(".form-control").removeClass("selectedOption"); + $("#empSearch").val(''); + $("#SearchModel_EmployerLName").val(''); + $("#SearchModel_EmployerId").val(''); + + + if (event.keyCode === 13) { + if ($("#SearchModel_Id").val() == "0") + $("#SearchModel_WorkshopFullName").val($("#empSearchWorkshop").val()) + $("#btnSearch").click(); + } +}); + + +//------Employer----- +var container = $('#emp'); +var searchBox = $('#empSearch'); +var hiddenInputVal = $('.sendEmployeeId'); +var searchResul = $('.searchResult'); +var mixContainerAndSerchResult = $('#emp , .searchResult'); + +container.hide(); +var liList; +var liPointer; +let count = 0; + +//close search Employee when click on body +$(document).on('click', + function (event) { + if (!$(event.target).closest(container).length) { + container.hide(); + } + }); + +//select option by mouse +function selectItem(id, employeeFullName) { + searchBox.val(employeeFullName); + hiddenInputVal.val(id); + container.hide(); + searchBox.addClass("selectedOption"); +}; + +//search by Ajax +searchBox.on('keyup keypress', + function (e) { + $(".form-control").removeClass("selectedOption"); + // $("#empSearchContractingPartyID").val(''); + // $("#SearchModel_ContactingPartyName").val(''); + + + if ($(this).val() == '') { + $("#SearchModel_EmployerId").val("0"); + $("#SearchModel_EmployerLName").val(''); + } + //stop submit form with enter + var keyCode = e.keyCode || e.which; + if (keyCode === 13) { + e.preventDefault(); + if (count > 0 && count <= liList.length) { + liPointer.click(); + } + return false; + } + searchBox.removeClass("selectedOption"); + let searchText = $(this).val(); + hiddenInputVal.val(0); + + if (searchText.length > 1) { + + $.ajax({ + async: false, + contentType: 'charset=utf-8', + dataType: 'json', + type: 'GET', + url: employerNameAjax, + data: { "searchText": searchText }, + headers: { "RequestVerificationToken": antiforgeryToken }, + + success: function (response) { + $(".opt").remove(); + if (response.mylist.length > 0) { //result Founded + + $(".noResult").remove(); + container.show(); + $.each(response.mylist, + function (i, item) { + let li = `
  • ${item.lName}
  • `; + searchResul.append(li); + + }); + } else { //result NotFounded + $(".noResult").remove(); + container.show(); + let noResult = `
  • نتیجه ای یافت نشد
  • `; + searchResul.append(noResult); + } + } // endOfSuccess + + }); //endOfAjax + + } else { + container.hide(); + count = 0; + } + //keyboard Arrow Key Select And Enter + liList = $('#emp ul li'); + mixContainerAndSerchResult.animate({ + scrollTop: $(liList.eq(0)).offset().top - container.offset().top + container.scrollTop() + }, + 50); + if (e.which === 40) { // if ArrowUp + if (count > 0 && count <= liList.length) { + + liPointer.removeClass('keyboardSelected'); + console.log(count + "plusOne"); + liList.eq(count).addClass('keyboardSelected'); + liPointer = liList.eq(count); + if (count > 4) { + //ScrollDown + mixContainerAndSerchResult.animate({ + scrollTop: $(liPointer).offset().top - container.offset().top + container.scrollTop() + }, + 50); + } + count += 1; + + } else { + + liList.eq(0).addClass("keyboardSelected"); + liPointer = liList.eq(0); + count = 1; + } + } else if (e.which === 38) { //if ArrowDown + if (count > 0 && count <= liList.length) { + liPointer.removeClass('keyboardSelected'); + count -= 1; + liList.eq(count).addClass('keyboardSelected'); + liPointer = liList.eq(count); + //ScrollUp + mixContainerAndSerchResult.animate({ + scrollTop: $(liPointer).offset().top - container.offset().top + container.scrollTop() + }, + 50); + } + } + }); + + +$("#empSearch").keypress(function (event) { + $(".form-control").removeClass("selectedOption"); + $("#empSearchWorkshop").val(''); + $("#SearchModel_Id").val(''); + $("#SearchModel_WorkshopFullName").val(''); + if (event.keyCode === 13) { + if ($("#SearchModel_EmployerId").val() == "0") + $("#SearchModel_EmployerLName").val($("#empSearch").val()) + $("#btnSearch").click(); + } +}); + + +$(".btn-searchWorkshop").click(function () { + + if ($("#SearchModel_Id").val() == "0" || $("#SearchModel_Id").val() == "") + $("#SearchModel_WorkshopFullName").val($("#empSearchWorkshop").val()); + + if ($("#SearchModel_EmployerId").val() == "0" || $("#SearchModel_EmployerId").val() == "") + $("#SearchModel_EmployerLName").val($("#empSearch").val()); + + + if ($("#empSearch").val() == "0") + $("#empSearch").val(''); + + $("#btnSearch").click(); +}); + +function remove(id, hasLeftwork) { + + $('.sweet-alert').removeClass("successSwall"); + $('.sweet-alert').removeClass("errorSwall"); + swal({ + title: hasLeftwork == "True" ? "توجه داشته باشید حذف کامل از دیتابیس میسر نمی باشد،اما با تایید این پیام این کارگاه و کلیه عملیات مربوط به آن غیرفعال می گردد." : "توجه داشته باشید با تایید این پیام، اطلاعات لیست مورد نظر بطور کامل از بانک اطلاعاتی حذف خواهد شد.", + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بله", + cancelButtonText: "خیر", + closeOnConfirm: false, + closeOnCancel: true, + customClass: (hasLeftwork == "True" ? "questionSwall" : "") + }, + function (isConfirm) { + if (isConfirm) { + + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: deleteWorkshopAjaxUrl, + headers: { "RequestVerificationToken": antiforgeryToken }, + data: { "id": id }, + success: function (response) { + + if (response.isSuccedded) { + swal({ + title: "حذف با موفقیت انجام شد.", + text: "", + type: "success", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بستن", + //cancelButtonText: "خیر", + closeOnConfirm: true, + customClass: "successSwall" + }, + function (isConfirm) { + if (isConfirm) { + //$("#btnSearch").click(); + var url = indexAjax; + window.location.href = url; + } + }); + } else { + + if (response.message == "DeActive") { + swal({ + title: "غیرفعال شدن این کارگاه با موفقیت انجام شد.", + text: "به منظور حذف از دیتابیس باید کلیه عملیات مربوط به این کارگاه را حذف نمایید.", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بستن", + cancelButtonText: "بستن", + closeOnConfirm: true, + closeOnCancel: true, + customClass: "warningSwall2" + }, + function (isConfirm) { + if (isConfirm) { + //$("#btnSearch").click(); + var url = indexAjax; + window.location.href = url; + } + }); + + } else { + swal({ + title: response.message, + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + //confirmButtonText: "بستن", + cancelButtonText: "بستن", + closeOnConfirm: false, + closeOnCancel: true, + customClass: "errorSwall" + }); + } + } + }, + failure: function (response) { + console.log(5, response) + } + }); + } + + }); + +} + +function active(id) { + $('.sweet-alert').removeClass("successSwall"); + $('.sweet-alert').removeClass("errorSwall"); + swal({ + title: "آیا از فعال کردن این کارگاه مطمئن هستید؟", + text: "", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بله", + cancelButtonText: "خیر", + closeOnConfirm: false, + closeOnCancel: true + }, + function (isConfirm) { + if (isConfirm) { + + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: activeWorkshopAjaxUrl, + headers: { "RequestVerificationToken": antiforgeryToken }, + data: { "id": id }, + success: function (response) { + // console.log(response); + if (response.isSuccedded) { + swal({ + title: response.message, + text: "", + type: "success", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "بستن", + //cancelButtonText: "خیر", + closeOnConfirm: true, + customClass: "successSwall" + }, + function (isConfirm) { + if (isConfirm) { + var url = indexAjax; + window.location.href = url; + // $("#btnSearch").click(); + } + }); + + } else { + swal({ + title: response.message, + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + //confirmButtonText: "بستن", + cancelButtonText: "بستن", + closeOnConfirm: false, + closeOnCancel: true, + customClass: "errorSwall" + }); + } + + }, + failure: function (response) { + console.log(5, response) + } + }); + } + + }); +} + + +function selectState(value) { + if (value != "") + $("#SearchModel_State").val(value); +} + +function selectCity(element) { + var value = $(element).val(); + if (value != "0" && value != "") { + $("#SearchModel_City").val($(element).find('option:selected').text()); + } +} + +$(document).ready(function () { + $(".accountList").select2({ + placeholder: "نام و نام خانوادگی اعضاء", + allowClear: true, + dir: "rtl" + }); +}); + +function printListWorkshopModal() { + var insuranceCode = $('#SearchModel_InsuranceCode').val(); + var state = $('#SearchModel_State').val(); + var city = $('#SearchModel_City').val(); + var isActiveString = $('#SearchModel_IsActiveString').val(); + var accountId = $('#SearchModel_AccountId').val(); + var accountIds = $('#SearchModel_AccountIds').val(); + + // if (accountIds == null) { + // $.Notification.autoHideNotify('error', 'bottom right', 'پیام سیستم ', "لطفا نام و نام خانوادگی اعضاء را انتخاب نمایید."); + // return false; + // } + + // var accountIdsNumbers = accountIds.map(function(value) { + // return Number(value); + // }); + // var accountIdsQuery = accountIdsNumbers.map(function(id) { + // return `SearchModel.AccountIds=${id}`; + // }).join('&'); + + // var parameter = `&SearchModel.InsuranceCode=${insuranceCode}&SearchModel.State=${state}&SearchModel.City=${city}&SearchModel.IsActiveString=${isActiveString}&${accountIdsQuery}`; + var parameter = `&SearchModel.InsuranceCode=${insuranceCode}&SearchModel.State=${state}&SearchModel.City=${city}&SearchModel.IsActiveString=${isActiveString}&SearchModel.AccountId=${accountId}`; + + window.location.href = printListWorkshopUrl + parameter; +} From 097d5a6e86e3e13a47566c67f046414376efc0bd Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 14:03:39 +0330 Subject: [PATCH 2/9] sepration report js --- .../Admin/Pages/Company/Reports/Index.cshtml | 1112 +---------------- ServiceHost/ServiceHost.csproj | 1 + .../AssetsAdmin/page/Report/js/Index.js | 1093 ++++++++++++++++ 3 files changed, 1110 insertions(+), 1096 deletions(-) create mode 100644 ServiceHost/wwwroot/AssetsAdmin/page/Report/js/Index.js diff --git a/ServiceHost/Areas/Admin/Pages/Company/Reports/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Reports/Index.cshtml index 379512f5..624583ce 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Reports/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Reports/Index.cshtml @@ -95,7 +95,7 @@ pointer-events: none; } - + string adminVersion = _0_Framework.Application.Version.AdminVersion; var successSend = "successSend"; } @@ -849,1100 +849,20 @@ + + + - } \ No newline at end of file diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index 0e50c2f1..0e662c03 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -110,6 +110,7 @@ + diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Report/js/Index.js b/ServiceHost/wwwroot/AssetsAdmin/page/Report/js/Index.js new file mode 100644 index 00000000..001de1ae --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Report/js/Index.js @@ -0,0 +1,1093 @@ + +$(document).ready(function () { + $('#ContractDonePercent').click(function (e) { + $("#ContractDonePercent").addClass("active"); + $("#ContractSignPercent").removeClass("active"); + $("#CheckoutDonePercent").removeClass("active"); + $("#CheckoutSignPercent").removeClass("active"); + $(".ContractDonePercent").show(); + $(".ContractSignPercent").hide(); + $(".CheckoutDonePercent").hide(); + $(".CheckoutSignPercent").hide(); + + toggleDivs("#ContractDonePercentDivMobile", "#ContractDonePercentDivMobile .mainMobilePersonal1"); + + scrolltext(); + + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + + $("#ContractDonePercentDiv").click(); + }); + $('#ContractSignPercent').click(function (e) { + $("#ContractDonePercent").removeClass("active"); + $("#ContractSignPercent").addClass("active"); + $("#CheckoutDonePercent").removeClass("active"); + $("#CheckoutSignPercent").removeClass("active"); + + $(".ContractDonePercent").hide(); + $(".ContractSignPercent").show(); + $(".CheckoutDonePercent").hide(); + $(".CheckoutSignPercent").hide(); + + toggleDivs("#ContractSignPercentDivMobile", "#ContractSignPercentDivMobile .mainMobilePersonal2"); + + scrolltext(); + + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + + $("#ContractSignPercentDiv").click(); + }); + $('#CheckoutDonePercent').click(function (e) { + $("#ContractDonePercent").removeClass("active"); + $("#ContractSignPercent").removeClass("active"); + $("#CheckoutDonePercent").addClass("active"); + $("#CheckoutSignPercent").removeClass("active"); + + $(".ContractDonePercent").hide(); + $(".ContractSignPercent").hide(); + $(".CheckoutDonePercent").show(); + $(".CheckoutSignPercent").hide(); + + toggleDivs("#CheckoutDonePercentDivMobile", "#CheckoutDonePercentDivMobile .mainMobilePersonal3"); + + scrolltext(); + + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + + $("#CheckoutDonePercentDiv").click(); + }); + $('#CheckoutSignPercent').click(function (e) { + $("#ContractDonePercent").removeClass("active"); + $("#ContractSignPercent").removeClass("active"); + $("#CheckoutDonePercent").removeClass("active"); + $("#CheckoutSignPercent").addClass("active"); + + $(".ContractDonePercent").hide(); + $(".ContractSignPercent").hide(); + $(".CheckoutDonePercent").hide(); + $(".CheckoutSignPercent").show(); + + toggleDivs("#CheckoutSignPercentDivMobile", "#CheckoutSignPercentDivMobile .mainMobilePersonal4"); + + scrolltext(); + + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + + $("#CheckoutSignPercentDiv").click(); + }); +}); + +// workshopFirstLoad +function ajaxContractDone(accountId, accountFullName, workshopList) { + $('#workshopListMobileSection').html(''); + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxContractDoneUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "accountId": Number(accountId), "workshopList": workshopList }, + traditional: true, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const workshopList = response.workshopList; + var tableHtml = ` + + + + + + + + + + + + `; + + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractDonePercent); + tableHtml += ` + + + + + + + + `; + }); + + tableHtml += ` + +
    کد بایگانیکارگاهپردازش انجام کار
    ${item.archiveCode}${item.workshopFullName} +
    +
    +
    +
    ${item.contractDonePercent}% + +
    + `; + var ListMobileHtml = ``; + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractDonePercent); + ListMobileHtml += ` +
    +
    +
    +
    +
    ${item.workshopFullName}
    +
    +
    +
    +
    +
    + ${item.contractDonePercent}% +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    +
    + `; + }); + + + $('#loading').hide(); + $('#appendTableWorkshop').append(tableHtml); + $('#workshopListMobileSection').append(ListMobileHtml); + $("#ajaxEmployeeContract").click(); + $("#ajaxEmployeeContract").addClass("active"); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxContractSignDone(accountId, accountFullName, workshopList) { + $('#workshopListMobileSection').html(''); + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxContractSignDoneUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "accountId": Number(accountId), "workshopList": workshopList }, + traditional: true, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const workshopList = response.workshopList; + var tableHtml = ` + + + + + + + + + + + + `; + + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractSignPercent); + tableHtml += ` + + + + + + + + `; + }); + + tableHtml += ` + +
    کد کارگاهکارگاهپردازش انجام کار
    ${item.archiveCode}${item.workshopFullName} +
    +
    +
    +
    ${item.contractSignPercent}% + +
    + `; + var ListMobileHtml = ``; + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractDonePercent); + ListMobileHtml += ` +
    +
    +
    +
    +
    ${item.workshopFullName}
    +
    +
    +
    +
    +
    + ${item.contractDonePercent}% +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    +
    + `; + }); + + $('#loading').hide(); + $('#appendTableWorkshop').append(tableHtml); + $('#workshopListMobileSection').append(ListMobileHtml); + $("#ajaxEmployeeContractSign").click(); + $("#ajaxEmployeeContractSign").addClass("active"); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxWorkshopCheckoutDone(accountId, accountFullName, workshopList) { + $('#workshopListMobileSection').html(''); + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxWorkshopCheckoutDoneUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "accountId": Number(accountId), "workshopList": workshopList }, + traditional: true, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const workshopList = response.workshopList; + var tableHtml = ` + + + + + + + + + + + + `; + + workshopList.forEach(function (item) { + const color = convertColorPercent(item.checkoutDonePercent); + tableHtml += ` + + + + + + + + `; + }); + + tableHtml += ` + +
    کد کارگاهکارگاهپردازش انجام کار
    ${item.archiveCode}${item.workshopFullName} +
    +
    +
    +
    ${item.checkoutDonePercent}% + +
    +`; + var ListMobileHtml = ``; + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractDonePercent); + ListMobileHtml += ` +
    +
    +
    +
    +
    ${item.workshopFullName}
    +
    +
    +
    +
    +
    + ${item.contractDonePercent}% +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    +
    + `; + }); + + $('#loading').hide(); + $('#appendTableWorkshop').append(tableHtml); + $('#workshopListMobileSection').append(ListMobileHtml); + $("#ajaxEmployeeCheckout").click(); + $("#ajaxEmployeeCheckout").addClass("active"); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxWorkshopCheckoutSignDone(accountId, accountFullName, workshopList) { + $('#workshopListMobileSection').html(''); + $('#appendTableWorkshop').html(''); + $('#loading').show(); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxWorkshopCheckoutSignDoneUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "accountId": Number(accountId), "workshopList": workshopList }, + traditional: true, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const workshopList = response.workshopList; + var tableHtml = ` + + + + + + + + + + + + `; + + workshopList.forEach(function (item) { + const color = convertColorPercent(item.checkoutSignPercent); + tableHtml += ` + + + + + + + + `; + }); + + tableHtml += ` + +
    کد کارگاهکارگاهپردازش انجام کار
    ${item.archiveCode}${item.workshopFullName} +
    +
    +
    +
    ${item.checkoutSignPercent}% + +
    + `; + var ListMobileHtml = ``; + workshopList.forEach(function (item) { + const color = convertColorPercent(item.contractDonePercent); + ListMobileHtml += ` +
    +
    +
    +
    +
    ${item.workshopFullName}
    +
    +
    +
    +
    +
    + ${item.contractDonePercent}% +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    +
    + `; + }); + + $('#loading').hide(); + $('#appendTableWorkshop').append(tableHtml); + $('#workshopListMobileSection').append(ListMobileHtml); + $("#ajaxEmployeeCheckoutSign").click(); + $("#ajaxEmployeeCheckoutSign").addClass("active"); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +//EmployeeNotDone +function ajaxEmployeeContract(workshopId) { + $(`#employeeList_${workshopId} `).html(''); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxEmployeeContractUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "workshopId": Number(workshopId) }, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const employeeList = response.employeeList; + var divHtml = ``; + employeeList.forEach(function (item) { + divHtml += ` +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    + `; + }); + + var EmployeeListMobile = ``; + employeeList.forEach(function (item) { + EmployeeListMobile += ` +
    +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    +
    + `; + }); + $('#loadingPersonnel').hide(); + $('#personnelSection').append(divHtml); + $(`#employeeList_${workshopId} `).append(EmployeeListMobile); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxEmployeeContractSign(workshopId) { + $(`#employeeList_${workshopId} `).html(''); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxEmployeeContractSignUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "workshopId": Number(workshopId) }, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const employeeList = response.employeeList; + var divHtml = ``; + employeeList.forEach(function (item) { + divHtml += ` +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    + `; + }); + + var EmployeeListMobile = ``; + employeeList.forEach(function (item) { + EmployeeListMobile += ` +
    +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    +
    + `; + }); + $('#loadingPersonnel').hide(); + $('#personnelSection').append(divHtml); + $(`#employeeList_${workshopId} `).append(EmployeeListMobile); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxEmployeeCheckout(workshopId) { + $(`#employeeList_${workshopId} `).html(''); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxEmployeeCheckoutUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "workshopId": Number(workshopId) }, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const employeeList = response.employeeList; + var divHtml = ``; + employeeList.forEach(function (item) { + divHtml += ` +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    + `; + }); + + var EmployeeListMobile = ``; + employeeList.forEach(function (item) { + EmployeeListMobile += ` +
    +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    +
    + `; + }); + $('#loadingPersonnel').hide(); + $('#personnelSection').append(divHtml); + $(`#employeeList_${workshopId} `).append(EmployeeListMobile); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +function ajaxEmployeeCheckoutSign(workshopId) { + $(`#employeeList_${workshopId} `).html(''); + $('#personnelSection').html(''); + $('#loadingPersonnel').show(); + $.ajax({ + dataType: 'json', + url: ajaxEmployeeCheckoutSignUrl, + type: 'GET', + data: { "year": $('#selectYear').val(), "month": $('#selectMonth').val(), "workshopId": Number(workshopId) }, + headers: { "RequestVerificationToken": antiforgeryToken }, + success: function (response) { + if (response.success) { + const employeeList = response.employeeList; + var divHtml = ``; + employeeList.forEach(function (item) { + divHtml += ` +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    + `; + }); + + var EmployeeListMobile = ``; + employeeList.forEach(function (item) { + EmployeeListMobile += ` +
    +
    +
    +
    + ${item.employeeFullName} +
    +
    +
    + + + + + +
    +
    +
    + `; + }); + $('#loadingPersonnel').hide(); + $('#personnelSection').append(divHtml); + $(`#employeeList_${workshopId} `).append(EmployeeListMobile); + } else { + console.log("false"); + } + }, + failure: function (response) { + console.log(5, response); + + } + }); +} + +$(document).ready(function () { + if ($(window).width() < 992) { + // ********************** باز شدن جزئیات مربوط به کارگاه *************************** + $(document).on('click', + '.openAction', + function () { + $(this).next().find(".operations-btns").slideToggle(500); + $(".operations-btns").not($(this).next().find(".operations-btns")).slideUp(500); + }); + // ********************** باز شدن جزئیات مربوط به کارگاه *************************** + } + +}); + +if ($(window).width() < 992) { + $('.card.btn-card').removeClass('active'); + + $(document).ready(function () { + + $('.mainMobile').slick({ + centerMode: true, + arrows: false, + centerPadding: '60px', + slidesToShow: 3, + rtl: true, + responsive: [ + { + breakpoint: 992, + settings: { + arrows: false, + centerMode: true, + centerPadding: '80px', + slidesToShow: 1, + rtl: true, + } + }, + { + breakpoint: 768, + settings: { + arrows: false, + centerMode: true, + centerPadding: '80px', + slidesToShow: 1, + rtl: true, + } + }, + { + breakpoint: 480, + settings: { + arrows: false, + centerMode: true, + centerPadding: '40px', + slidesToShow: 1 + } + } + ] + }); + + $('.mainMobileSub').slick({ + centerMode: true, + dots: true, + arrows: false, + centerPadding: '60px', + slidesToShow: 1, + rtl: true, + responsive: [ + { + breakpoint: 768, + settings: { + arrows: false, + centerMode: true, + centerPadding: '40px', + slidesToShow: 1 + } + }, + { + breakpoint: 480, + settings: { + arrows: false, + centerMode: true, + centerPadding: '40px', + slidesToShow: 1 + } + } + ] + }); + + + // loadMainMobilePersonal(); + + + }); + +} + +$('#selectYear').on('change', + function () { + searchReport(); + }); +$('#selectMonth').on('change', + function () { + searchReport(); + }); + +function searchReport() { + const year = $('#selectYear').val(); + const month = $('#selectMonth').val(); + + const parameter = `?year=${year}&month=${month}`; + window.location.href = searchReportUrl + parameter; +} + +function convertColorPercent(value) { + + const redDark = "#B91C1C"; + const redLight = "#EF4444"; + + const orangeDark = "#F59E0B"; + const orangeLight = "#FBBF24"; + + const limeDark = "#81CB0F"; + const limeLight = "#A3E635"; + + switch (true) { + case (value <= 16): + color = redDark; + break; + case (value <= 33): + color = redLight; + break; + case (value <= 49): + color = orangeDark; + break; + case (value <= 66): + color = orangeLight; + break; + case (value <= 83): + color = limeLight; + break; + case (value <= 100): + color = limeDark; + break; + default: + color = ""; + break; + } + return color; +} + +$(document).ready(function () { + $('.activeBtn').click(function () { + $('.activeBtn').removeClass("active"); + $(this).addClass("active"); + }); + + $(document).on('click', + '.tableActive', + function () { + $('.tableActive').removeClass("active"); + $(this).addClass("active"); + }); +}); + +$(document).ready(function () { + scrolltext(); +}); + +function scrolltext() { + $('.scrolltext').each(function () { + const container = $(this); + const text = container.find('span'); + const containerWidth = container.width(); + const textWidth = text.width(); + + if (containerWidth < textWidth) { + text.addClass('animate'); + } + }); +} + + +function toggleDivs(showDiv, slickClass) { + $("#ContractDonePercentDivMobile, #ContractSignPercentDivMobile, #CheckoutDonePercentDivMobile, #CheckoutSignPercentDivMobile").hide(); + $(showDiv).show(); + + if ($(slickClass).hasClass('slick-initialized')) { + $(slickClass).slick('unslick'); + } + + initializeSlickSlider(slickClass); + + setTimeout(function () { + $(showDiv).show().addClass('showing'); + }, + 100); +} + +function initializeSlickSlider(selector) { + $(selector).slick({ + dots: true, + arrows: false, + slidesToShow: 3, + rtl: true, + responsive: [ + { + breakpoint: 768, + settings: { + arrows: false, + slidesToShow: 3, + } + }, + { + breakpoint: 480, + settings: { + arrows: false, + slidesToShow: 3, + } + } + ] + }); +} + +function searchWorkshop() { + var input, filter, tbody, tr, a, i; + input = document.getElementById("search"); + filter = input.value.toUpperCase(); + tbody = document.getElementById("tbody"); + tr = tbody.getElementsByTagName("tr"); + for (i = 0; i < tr.length; i++) { + td = tr[i].getElementsByTagName("td")[1]; + if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { + tr[i].style.display = ""; + } else { + tr[i].style.display = "none"; + } + } +} + + + + +//===============PrintAll by account and workshoplist============== + +function printAllAction(id, workshopList, handler) { + const year = $('#selectYear').val(); + const month = $('#selectMonth').val(); + const accoundId = Number(id); + const url = `#showmodal=/Admin/Company/Reports/Index?year=${year}&month=${month}&accountId=${accoundId}&workshopList=${workshopList}&handler=${handler}`; + window.location.href = url; +} + + +function printAllContractDone(id, workshopList) { + + printAllAction(id, JSON.stringify(workshopList), 'PrintAllContractDone'); +} + +function PrintAllContractSignDone(id, workshopList) { + printAllAction(id, JSON.stringify(workshopList), 'PrintAllContractSignDone'); +} + +function printAllCheckoutDone(id, workshopList) { + printAllAction(id, JSON.stringify(workshopList), 'PrintAllCheckoutDone'); +} + +function printAllCheckoutSignDone(id, workshopList) { + printAllAction(id, JSON.stringify(workshopList), 'PrintAllCheckoutSignDone'); +} +//================================================================ + + +function printAllEmployeeAction(id, accountFullName, handler) { + const year = $('#selectYear').val(); + const month = $('#selectMonth').val(); + const workshopId = Number(id); + const url = `#showmodal=/Admin/Company/Reports/Index?year=${year}&month=${month}&workshopId=${workshopId}&accountFullName=${accountFullName}&handler=${handler}`; + console.log(url); + window.location.href = url; +} + +function PrintWorkshopContractDone(id, accountFullName) { + printAllEmployeeAction(id, accountFullName, 'PrintEmployeeContract'); +} + +function PrintWorkshopContractSignDone(id, accountFullName) { + printAllEmployeeAction(id, accountFullName, 'PrintEmployeeContractSign'); +} + +function PrintWorkshopCheckoutDone(id, accountFullName) { + printAllEmployeeAction(id, accountFullName, 'PrintEmployeeCheckout'); +} + +function PrintWorkshopCheckoutSignDone(id, accountFullName) { + printAllEmployeeAction(id, accountFullName, 'PrintEmployeeCheckoutSign'); +} From a01a927f6f25771edc28cd72953c45e9e3d816d7 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 15:11:39 +0330 Subject: [PATCH 3/9] chnage pm shift duration method on domain --- .../Entities/WorkingHours.cs | 24 ++-- .../Company/SmsResult/SmsSettings.cshtml | 129 ++++++++++++++++-- ServiceHost/ServiceHost.csproj | 8 +- 3 files changed, 139 insertions(+), 22 deletions(-) diff --git a/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/SalaryPaymentSettingAgg/Entities/WorkingHours.cs b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/SalaryPaymentSettingAgg/Entities/WorkingHours.cs index 0522364f..f3d06472 100644 --- a/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/SalaryPaymentSettingAgg/Entities/WorkingHours.cs +++ b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/SalaryPaymentSettingAgg/Entities/WorkingHours.cs @@ -22,7 +22,9 @@ public class WorkingHours PersianDayOfWeek = persianDayOfWeek; IsActiveDay = isActiveDay; - ComputeShiftDuration(startShiftOne, endShiftOne, startShiftTwo, endShiftTwo, restTime, hasShiftOne, hasShiftTwo,hasRestTime); + var computeResult = ComputeShiftDuration(startShiftOne, endShiftOne, startShiftTwo, endShiftTwo, restTime, hasShiftOne, hasShiftTwo,hasRestTime); + ShiftDuration = computeResult.shiftDuration; + } @@ -109,10 +111,11 @@ public class WorkingHours /// /// /// - private void ComputeShiftDuration(TimeSpan startShift, TimeSpan endShift, TimeSpan startShiftTwo, TimeSpan endShiftTwo, TimeSpan restTime, bool hasShiftOne, bool hasShiftTwo, bool hasRestTime) + public static (TimeSpan shiftDuration, int shiftDurationInMinutes) ComputeShiftDuration(TimeSpan startShift, TimeSpan endShift, TimeSpan startShiftTwo, TimeSpan endShiftTwo, TimeSpan restTime, bool hasShiftOne, bool hasShiftTwo, bool hasRestTime) { var now = DateTime.Now.Date; - + TimeSpan shiftDurationResult = new TimeSpan(); + int shiftDurationInMinutesResult = 0; if (hasShiftOne && !hasShiftTwo) { DateTime startOne = new DateTime(now.Year, now.Month, now.Day, startShift.Hours, startShift.Minutes,0); @@ -123,7 +126,8 @@ public class WorkingHours endOne = endOne.AddDays(1); var shiftDuration = (endOne - startOne); - ShiftDuration = hasRestTime ? (shiftDuration - restTime) : shiftDuration; + shiftDurationResult = hasRestTime ? (shiftDuration - restTime) : shiftDuration; + shiftDurationInMinutesResult = (int)shiftDurationResult.TotalMinutes; } else if (!hasShiftOne && hasShiftTwo) { @@ -134,7 +138,8 @@ public class WorkingHours endTow = endTow.AddDays(1); - ShiftDuration = (endTow - startTow); + shiftDurationResult = (endTow - startTow); + shiftDurationInMinutesResult = (int)shiftDurationResult.TotalMinutes; } else if (hasShiftOne && hasShiftTwo) { @@ -152,13 +157,12 @@ public class WorkingHours endTow = endTow.AddDays(1); var shiftDurationTow = (endTow - startTow); - ShiftDuration = shiftOneDuration.Add(shiftDurationTow); - } - else - { - ShiftDurationInMinutes = 0; + shiftDurationResult = shiftOneDuration.Add(shiftDurationTow); + shiftDurationInMinutesResult = (int)shiftDurationResult.TotalMinutes; } + + return (shiftDurationResult, shiftDurationInMinutesResult); } } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml index 279d822f..130baf85 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml @@ -3,10 +3,15 @@ @Html.AntiForgeryToken() @{ - string adminVersion = _0_Framework.Application.Version.AdminVersion; - - - + var adminVersion = _0_Framework.Application.Version.AdminVersion; + + @section Styles { + + + } + + + }
    @@ -46,7 +51,7 @@ پیامک مسدودی - +
  • @@ -58,7 +63,7 @@ پیامک هشدار برای اقدام قضائی
  • - +
  • - - + +
    @@ -96,7 +101,115 @@ var urlAjaxToRemove = '@Url.Page("/Company/SmsResult/SmsSettings", "RemoveSetting")'; var antiforgeryToken = $('@Html.AntiForgeryToken()').val(); + + + // $(document).ready(function () { + + // $('.time-input').mask('00:00', { + // translation: { + // '0': { pattern: /[0-9]/ }, + // // برای اولین رقم ساعت فقط 0-2 + // 'H': { pattern: /[0-2]/ }, + // // اگر اولین رقم 2 باشد دومین رقم فقط 0-3 + // 'h': { pattern: /[0-3]/ }, + // // برای دقیقه + // 'M': { pattern: /[0-5]/ }, + // 'm': { pattern: /[0-9]/ }, + // } + // }); + + + + // // پیش‌فرض: لود تب اول با workshopId + // loadPartial("/Admin/Company/SmsResult/SmsSettings?handler=InstitutionContractDebtReminderTab"); + // $("#institutionContractDebtReminderTab").addClass("active"); + + // // کلیک روی تب‌ها + // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").click(function (e) { + // e.preventDefault(); + + + + // let url = $(this).data("url"); + + + + // switch (this.id) { + // case "institutionContractDebtReminderTab": + + // loadPartial(url); + + // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + // $(this).addClass("active"); + // break; + // case "blockContractingPartyTab": + + // loadPartial(url); + // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + // $(this).addClass("active"); + + // break; + // case "legalActionTab": + // loadPartial(url); + // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + // $(this).addClass("active"); + // break; + // case "warningTab": + // loadPartial(url); + // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + // $(this).addClass("active"); + // break; + + // } + + // }); + + // function loadPartial(url) { + // $.get(url, function (data) { + // $("#partialContainer").html(data); + // }); + // } + + + + + // }); + + + // function remove(id) { + + + + // $.ajax({ + // dataType: 'json', + // type: 'GET', + // url: urlAjaxToRemove, + // headers: { "RequestVerificationToken": antiforgeryToken }, + // data: { id: id }, + + // success: function (response) { + // if (response.isSuccess) { + // $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); + + + // setTimeout(function () { + // $(".li-wizard.step.active").trigger("click"); + + + + // }, 500); + // } else { + // $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); + // } + + // }, + // failure: function (response) { + // //console.log(5, response); + // } + // }); + // } + } \ No newline at end of file diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index 0e662c03..6b5cbcc6 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -59,10 +59,6 @@ - - - - @@ -110,7 +106,11 @@ + + + + From 2faf6c1400a5b30158a955108a8f0ee97b2d1455 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 16:27:36 +0330 Subject: [PATCH 4/9] Get Average Weekly Duration query Handler --- .../GetAverageWeeklyDurationQueryHandler.cs | 86 +++++++++++++++++++ .../SalaryPaymentSettingsController.cs | 10 +++ 2 files changed, 96 insertions(+) create mode 100644 ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs new file mode 100644 index 00000000..d4d548dc --- /dev/null +++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs @@ -0,0 +1,86 @@ +using GozareshgirProgramManager.Application._Common.Interfaces; +using GozareshgirProgramManager.Application._Common.Models; +using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.CreateSalarySettings; +using GozareshgirProgramManager.Domain.SalaryPaymentSettingAgg.Entities; + +namespace GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetAverageWeeklyDuration; + +public class GetAverageWeeklyDurationQueryHandler : IBaseQueryHandler +{ + + + public async Task> Handle(GetAverageWeeklyDurationQuery request, CancellationToken cancellationToken) + { + TimeSpan shiftDurationResult = new TimeSpan(); + int shiftDurationInMinutesResult = 0; + if (request.WorkingHoursList.Any()) + { + var workingHoursList = request.WorkingHoursList.Where(x=> x.IsActiveDay).ToList(); + + + foreach (var item in workingHoursList) + { + var startShiftOne = new TimeSpan(); + var endShiftOne = new TimeSpan(); + var startShiftTwo = new TimeSpan(); + var endShiftTwo = new TimeSpan(); + var restTime = new TimeSpan(); + item.HasShiftOne = false; + item.HasRestTime = false; + item.HasShiftTow = false; + + if (!string.IsNullOrWhiteSpace(item.StartShiftOne) && !string.IsNullOrWhiteSpace(item.EndShiftOne)) + { + startShiftOne = TimeSpan.ParseExact(item.StartShiftOne, @"hh\:mm", null); + endShiftOne = TimeSpan.ParseExact(item.EndShiftOne, @"hh\:mm", null); + + item.HasShiftOne = true; + + + if (!string.IsNullOrWhiteSpace(item.RestTime)) + { + try + { + restTime = TimeSpan.ParseExact(item.RestTime, @"hh\:mm", null); + item.HasRestTime = true; + } + catch (Exception e) + { + var zeroResponse = new GetAverageWeeklyDurationResponse(new TimeSpan(), 0); + return OperationResult.Success(zeroResponse); + } + } + + } + + if (!string.IsNullOrWhiteSpace(item.StartShiftTwo) && + !string.IsNullOrWhiteSpace(item.EndShiftTwo)) + { + item.HasRestTime = false; + item.HasShiftTow = true; + + startShiftTwo = TimeSpan.ParseExact(item.StartShiftTwo, @"hh\:mm", null); + endShiftTwo = TimeSpan.ParseExact(item.EndShiftTwo, @"hh\:mm", null); + } + + var res = WorkingHours.ComputeShiftDuration(startShiftOne, endShiftOne, startShiftTwo, + endShiftTwo, restTime, item.HasShiftOne, item.HasShiftTow, item.HasRestTime); + + shiftDurationResult = shiftDurationResult.Add(res.shiftDuration); + shiftDurationInMinutesResult += res.shiftDurationInMinutes; + + } + + + + + } + + var response = new GetAverageWeeklyDurationResponse(shiftDurationResult, shiftDurationInMinutesResult); + return OperationResult.Success(response); + } +} + +public record GetAverageWeeklyDurationQuery(List WorkingHoursList) : IBaseQuery; + +public record GetAverageWeeklyDurationResponse(TimeSpan AverageSpan, int AverageInt); \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs index bc4784e2..f4ed03b8 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs @@ -1,6 +1,7 @@ using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.CreateSalarySettings; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.EditSalarySettings; +using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetAverageWeeklyDuration; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetSalarySettingToEdit; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetUserListWhoHaveSettings; using GozareshgirProgramManager.Domain.SalaryPaymentSettingAgg.Enums; @@ -45,6 +46,15 @@ public class SalaryPaymentSettingsController : ProgramManagerBaseController return res; } + [HttpPost("GetAverageWeeklyDuration")] + public async Task>> GetAverageWeeklyDuration(GetAverageWeeklyDurationQuery command) + { + + var res = await _mediator.Send(command); + + return res; + } + [HttpPost("edit")] public async Task> Edit([FromBody] EditSalarySettingsCommand command) { From 49d401856f9fb70a78d5a1a7b24f2a184451e40a Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 17:46:19 +0330 Subject: [PATCH 5/9] change GetAverageWeeklyDuration method --- .../ProgramManager/SalaryPaymentSettingsController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs index f4ed03b8..667c0ca2 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs @@ -47,7 +47,7 @@ public class SalaryPaymentSettingsController : ProgramManagerBaseController } [HttpPost("GetAverageWeeklyDuration")] - public async Task>> GetAverageWeeklyDuration(GetAverageWeeklyDurationQuery command) + public async Task>> GetAverageWeeklyDuration([FromBody] GetAverageWeeklyDurationQuery command) { var res = await _mediator.Send(command); From 998759e2dcc39c5a72f61c555e4694255ca5a81e Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 17:58:27 +0330 Subject: [PATCH 6/9] change smsSettings --- .../Company/SmsResult/SmsSettings.cshtml | 116 ++---------------- .../page/SmsSettings/js/SmsSettings.js | 5 + 2 files changed, 16 insertions(+), 105 deletions(-) diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml index 130baf85..b5a8ae94 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml @@ -74,6 +74,17 @@ پیامک اقدام قضائی
  • + +
  • + + + پیامک اقدام قضائی + +
  • @@ -103,111 +114,6 @@ var antiforgeryToken = $('@Html.AntiForgeryToken()').val(); - // $(document).ready(function () { - - // $('.time-input').mask('00:00', { - // translation: { - // '0': { pattern: /[0-9]/ }, - // // برای اولین رقم ساعت فقط 0-2 - // 'H': { pattern: /[0-2]/ }, - // // اگر اولین رقم 2 باشد دومین رقم فقط 0-3 - // 'h': { pattern: /[0-3]/ }, - // // برای دقیقه - // 'M': { pattern: /[0-5]/ }, - // 'm': { pattern: /[0-9]/ }, - // } - // }); - - - - // // پیش‌فرض: لود تب اول با workshopId - // loadPartial("/Admin/Company/SmsResult/SmsSettings?handler=InstitutionContractDebtReminderTab"); - // $("#institutionContractDebtReminderTab").addClass("active"); - - // // کلیک روی تب‌ها - // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").click(function (e) { - // e.preventDefault(); - - - - // let url = $(this).data("url"); - - - - // switch (this.id) { - // case "institutionContractDebtReminderTab": - - // loadPartial(url); - - // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); - // $(this).addClass("active"); - // break; - // case "blockContractingPartyTab": - - // loadPartial(url); - // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); - // $(this).addClass("active"); - - // break; - // case "legalActionTab": - // loadPartial(url); - // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); - // $(this).addClass("active"); - // break; - // case "warningTab": - // loadPartial(url); - // $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); - // $(this).addClass("active"); - // break; - - // } - - // }); - - // function loadPartial(url) { - // $.get(url, function (data) { - // $("#partialContainer").html(data); - // }); - // } - - - - - // }); - - - // function remove(id) { - - - - // $.ajax({ - // dataType: 'json', - // type: 'GET', - // url: urlAjaxToRemove, - // headers: { "RequestVerificationToken": antiforgeryToken }, - // data: { id: id }, - - // success: function (response) { - // if (response.isSuccess) { - // $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); - - - // setTimeout(function () { - // $(".li-wizard.step.active").trigger("click"); - - - - // }, 500); - // } else { - // $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); - // } - - // }, - // failure: function (response) { - // //console.log(5, response); - // } - // }); - // } diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js b/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js index 5b1d5e03..71c97efb 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js @@ -54,6 +54,11 @@ $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); $(this).addClass("active"); break; + case "warningTab": + loadPartial(url); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $(this).addClass("active"); + break; } From e62270a9b742d5948868d4db80944ed75209d305 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 18:14:18 +0330 Subject: [PATCH 7/9] update sms settings js --- .../AssetsAdmin/page/SmsSettings/js/SmsSettings.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js b/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js index 71c97efb..bb7fa677 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/SmsSettings/js/SmsSettings.js @@ -20,7 +20,7 @@ $("#institutionContractDebtReminderTab").addClass("active"); // کلیک روی تب‌ها - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").click(function (e) { + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").click(function (e) { e.preventDefault(); @@ -34,29 +34,29 @@ loadPartial(url); - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").removeClass("active"); $(this).addClass("active"); break; case "blockContractingPartyTab": loadPartial(url); - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").removeClass("active"); $(this).addClass("active"); break; case "legalActionTab": loadPartial(url); - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").removeClass("active"); $(this).addClass("active"); break; case "warningTab": loadPartial(url); - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").removeClass("active"); $(this).addClass("active"); break; - case "warningTab": + case "institutionContractConfirmTab": loadPartial(url); - $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab").removeClass("active"); + $("#institutionContractDebtReminderTab, #blockContractingPartyTab, #legalActionTab, #warningTab, #institutionContractConfirmTab").removeClass("active"); $(this).addClass("active"); break; From b31559a29a5f257ba61c9d0c2f1d24992a49396e Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 14 Dec 2025 18:59:22 +0330 Subject: [PATCH 8/9] add institutionContractConfirmTab SmsSettigs --- .../Application/Enums/TypeOfSmsSetting.cs | 5 + .../Company/SmsResult/SmsSettings.cshtml | 2 +- .../Company/SmsResult/SmsSettings.cshtml.cs | 13 +- .../InstitutionContractConfirmData.cshtml | 155 ++++++++++++++++++ .../_CreateSmsSetting.cshtml | 3 + .../_EditSmsSetting.cshtml | 3 + 6 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/InstitutionContractConfirmData.cshtml diff --git a/0_Framework/Application/Enums/TypeOfSmsSetting.cs b/0_Framework/Application/Enums/TypeOfSmsSetting.cs index 9b4512b7..6d66fc47 100644 --- a/0_Framework/Application/Enums/TypeOfSmsSetting.cs +++ b/0_Framework/Application/Enums/TypeOfSmsSetting.cs @@ -33,4 +33,9 @@ public enum TypeOfSmsSetting /// LegalAction, + /// + /// پیامک تایید قراداد + /// + InstitutionContractConfirm, + } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml index b5a8ae94..5bfa1909 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml @@ -82,7 +82,7 @@
    - پیامک اقدام قضائی + پیامک تایید قرارداد مالی diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs index 05550166..3bad9bd9 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs @@ -236,7 +236,18 @@ namespace ServiceHost.Areas.Admin.Pages.Company.SmsResult { var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.Warning); return Partial("_SmsSettingPartials/WarningSmsListData", modelData); - } + } + + /// + /// تب پیامک هشدار قضایی + /// + /// + public async Task OnGetInstitutionContractConfirmTab() + { + var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.InstitutionContractConfirm); + return Partial("_SmsSettingPartials/InstitutionContractConfirmData", modelData); + } + #endregion } diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/InstitutionContractConfirmData.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/InstitutionContractConfirmData.cshtml new file mode 100644 index 00000000..bd5494d6 --- /dev/null +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/InstitutionContractConfirmData.cshtml @@ -0,0 +1,155 @@ +@using _0_Framework.Application.Enums +@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel +@{ + int index = 1; + +} + + + +
    + + @if (Model.EditSmsSettings.Any()) + { +
    + + +
    +
    ردیف
    +
    روز ارسال
    +
    ساعت ارسال
    +
    عملیات
    +
    + + + @foreach (var item in Model.EditSmsSettings) + { +
    + +
    @index
    +
    @item.DayOfMonth
    +
    @item.TimeOfDayDisplay
    + + @{ + index++; + } + +
    + + + + } +
    + } + + +
    diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml index a1553eea..487fddcf 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml @@ -111,6 +111,9 @@ }else if(typeOfSmsSetting == '@TypeOfSmsSetting.Warning'){ $('#warningTab').click(); + }else if(typeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){ + $('#institutionContractConfirmTab').click(); + } diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_EditSmsSetting.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_EditSmsSetting.cshtml index 11470758..ccbd15f0 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_EditSmsSetting.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_EditSmsSetting.cshtml @@ -114,6 +114,9 @@ }else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){ $('#warningTab').click(); + }else if(typeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){ + $('#institutionContractConfirmTab').click(); + } From 73bef104fb8d1abef249028d5e4686dfc739de23 Mon Sep 17 00:00:00 2001 From: mahan Date: Mon, 15 Dec 2025 09:45:39 +0330 Subject: [PATCH 9/9] feat: implement custom parameter binding convention for ASP.NET Core --- .../Conventions/ParameterBindingConvention.cs | 126 ++++++++++++++++++ ServiceHost/Program.cs | 7 +- 2 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 ServiceHost/Conventions/ParameterBindingConvention.cs diff --git a/ServiceHost/Conventions/ParameterBindingConvention.cs b/ServiceHost/Conventions/ParameterBindingConvention.cs new file mode 100644 index 00000000..ccc0fa73 --- /dev/null +++ b/ServiceHost/Conventions/ParameterBindingConvention.cs @@ -0,0 +1,126 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace ServiceHost.Conventions; + +/// +/// Convention برای تنظیم خودکار binding source پارامترها +/// GET: FromQuery (اگر attribute نداشته باشد) +/// POST/PUT/PATCH/DELETE: FromBody برای انواع پیچیده (اگر attribute نداشته باشد) +/// +public class ParameterBindingConvention : IApplicationModelConvention +{ + public void Apply(ApplicationModel application) + { + foreach (var controller in application.Controllers) + { + foreach (var action in controller.Actions) + { + foreach (var parameter in action.Parameters) + { + // فقط اگر کاربر خودش attribute مشخص کرده باشد، skip کن + // نه اگر ASP.NET Core خودش binding source پیش‌فرض گذاشته + if (HasExplicitBindingSourceAttribute(parameter)) + continue; + + // اگر پارامتر از route می‌آید، skip کن + if (IsRouteParameter(action, parameter)) + continue; + + // برای GET از Query استفاده کن + if (IsGetMethod(action)) + { + parameter.BindingInfo = parameter.BindingInfo ?? new BindingInfo(); + parameter.BindingInfo.BindingSource = BindingSource.Query; + } + // برای POST, PUT, PATCH, DELETE از Body استفاده کن (فقط برای انواع پیچیده) + else if (IsComplexType(parameter)) + { + parameter.BindingInfo = parameter.BindingInfo ?? new BindingInfo(); + parameter.BindingInfo.BindingSource = BindingSource.Body; + } + } + } + } + } + + /// + /// چک می‌کند که آیا کاربر خودش attribute binding source گذاشته یا نه + /// (FromBody, FromQuery, FromForm, FromRoute, FromHeader) + /// + private static bool HasExplicitBindingSourceAttribute(ParameterModel parameter) + { + // فقط attribute های manual کاربر را چک کن، نه binding source پیش‌فرض ASP.NET Core + var parameterInfo = parameter.ParameterInfo; + return parameterInfo.GetCustomAttributes(false) + .Any(a => a is IBindingSourceMetadata); + } + + /// + /// چک می‌کند که آیا پارامتر جزو route template است یا نه + /// مثلا: [HttpGet("{id}")] یا [Route("update/{id}")] + /// + private static bool IsRouteParameter(ActionModel action, ParameterModel parameter) + { + var parameterName = parameter.ParameterName; + + // چک کردن selectors در سطح action + foreach (var selector in action.Selectors) + { + if (selector.AttributeRouteModel?.Template != null) + { + if (selector.AttributeRouteModel.Template.Contains($"{{{parameterName}}}", StringComparison.OrdinalIgnoreCase)) + return true; + } + } + + // چک کردن selectors در سطح controller + foreach (var selector in action.Controller.Selectors) + { + if (selector.AttributeRouteModel?.Template != null) + { + if (selector.AttributeRouteModel.Template.Contains($"{{{parameterName}}}", StringComparison.OrdinalIgnoreCase)) + return true; + } + } + + return false; + } + + /// + /// چک می‌کند که آیا action از نوع GET است + /// + private static bool IsGetMethod(ActionModel action) + { + return action.Attributes.Any(a => a is HttpGetAttribute); + } + + /// + /// چک می‌کند که آیا نوع پارامتر، نوع پیچیده است یا خیر + /// انواع ساده: Primitive types, string, decimal, DateTime, Guid, Enum + /// + private static bool IsComplexType(ParameterModel parameter) + { + var type = parameter.ParameterInfo.ParameterType; + + // Nullable types را handle کن + var underlyingType = Nullable.GetUnderlyingType(type) ?? type; + + // انواع ساده را چک کن + if (underlyingType.IsPrimitive || + underlyingType == typeof(string) || + underlyingType == typeof(decimal) || + underlyingType == typeof(DateTime) || + underlyingType == typeof(DateTimeOffset) || + underlyingType == typeof(TimeSpan) || + underlyingType == typeof(Guid) || + underlyingType.IsEnum) + { + return false; + } + + return true; + } +} + diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index 40ca19b2..4378ec2c 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -31,6 +31,7 @@ using GozareshgirProgramManager.Application.Modules.Users.Commands.CreateUser; using GozareshgirProgramManager.Infrastructure; using GozareshgirProgramManager.Infrastructure.Persistence.Seed; using Microsoft.OpenApi; +using ServiceHost.Conventions; var builder = WebApplication.CreateBuilder(args); @@ -170,7 +171,11 @@ builder.Services.AddAuthorization(options => // }); -builder.Services.AddControllers().AddJsonOptions(options => +builder.Services.AddControllers(options => + { + options.Conventions.Add(new ParameterBindingConvention()); + }) + .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); });