<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="stylesheet" href="../css/q4r6w1t9.css">
    <title>خسارت تاخیر چند چک</title>
    <style>
    body {
        font-family: 'Tahoma', sans-serif;
    }
    #inputDiv, #tableContainer {
        margin: 20px;
        padding: 15px;
        border: 1px solid #ccc;
        border-radius: 5px;
        background-color: #f9f9f9;
    }
    table {
        width: 100%;
        border-collapse: collapse;
        margin-top: 20px;
    }
    table, th, td {
        border: 1px solid #000;
    }
    th, td {
        padding: 8px;
        text-align: center;
    }

    /* استایل ردیف‌های زوج با رنگ آبی کم‌رنگ */
    tr:nth-child(even) {
        background-color: #d0e7ff; /* رنگ آبی کم‌رنگ */
    }

    /* استایل ردیف‌های فرد */
    tr:nth-child(odd) {
        background-color: #ffffff; /* سفید برای ردیف‌های فرد */
    }
	.editable-date {
    width: 100px; /* عرض مناسب */
    padding: 5px; /* فضای داخلی */
    font-size: 14px; /* اندازه متن */
    text-align: center; /* متن وسط‌چین */
    
     
}
 
/* استایل هنگام هاور روی ردیف‌های جدول */
tr:hover {
    background-color: rgba(208, 248, 208, 0.6); /* سبز ملایم */
    font-weight: bold; /* متن بلد */
    box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); /* جلوه سه‌بعدی */
    transform: scale(1.02); /* کمی بزرگ‌تر شدن */
    transition: all 0.3s ease; /* جلوه روان */
}


.editable-amount {
    width: 120px; /* عرض مناسب برای مقادیر عددی */
    padding: 5px; /* فضای داخلی */
    font-size: 14px; /* اندازه متن */
    text-align: center; /* متن وسط‌چین */
    border: 1px solid #ccc; /* حاشیه خاکستری سبک */
    border-radius: 4px; /* گوشه‌های گرد */
    background-color: #f9f9f9; /* رنگ پس‌زمینه ملایم */
    transition: border-color 0.3s ease, box-shadow 0.3s ease; /* جلوه‌های زیبایی */
}

/* استایل هنگام فوکوس */
.editable-amount:focus {
    border-color: #007bff; /* تغییر رنگ حاشیه هنگام فوکوس */
    box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); /* سایه آبی هنگام فوکوس */
    outline: none; /* حذف خط پیش‌فرض فوکوس */
}

  .cross-button {
            width: 30px;
            height: 30px;
            background-color: red;
            color: white;
            font-size: 40px;
            border: none;
            border-radius: 50%; /* ایجاد دایره */
            display: flex;
            justify-content: center;
            align-items: center;
            cursor: pointer;
            padding: 0;
        }
		.edit-button {
    font-size: 30px; /* اندازه مناسب برای علامت مداد */
    color: orange; /* رنگ متن دکمه (علامت مداد) */
    background-color: transparent; /* پس‌زمینه شفاف */
    border: none; /* حذف حاشیه */
    cursor: pointer; /* تغییر نمای نشانگر موس به یک اشاره‌گر */
}

.edit-button:hover {
    color: red; /* تغییر رنگ هنگام هاور */
}

</style>

</head>
<body>
 

<div class="top-bar1">
  <button class="but1" onclick="window.location.href='../index.html';">صفحه اولیه</button> 
  <button class="but1"  >آموزش در ایتا</button>
  <button class="but1"  >آموزش در سروش</button>
   
  
  <h1 style="font-family: B Zar; font-size: 14px; font-weight: bold; text-align: center; margin: 0 auto;">
    محاسبه خسارت تاخیر تادیه چند چک
  </h1>
</div>




<div id="inputDiv">
    <textarea id="inputText" rows="10" style="width: 100%;" 
	placeholder="اجرائیه شامل چند چک را در اینجا کپی پست نماید(وارد نمائید)"></textarea>
    
     
		<tr><td >	<button class="but1" onclick="processText()">محاسبه</button></td>
			 
			<td><button class="but1" onclick="clearInputs1()" >پاکسازی</button> </td>
			<td><button class="but1" onclick="showTooltip1010()">راهنما</button> </td>
		  
			<td ><button class="but1" onclick="updateTextWithTableData()">صدور برگه جلب</button></td>
			<td >  <button class="but1" onclick="copyText()">کپی متن جلب</button></td></tr>
			
			   
        
     
</div>


<script>
if(!sessionStorage.getItem('hasReloaded')){var newUrl=window.location.href.split('?')[0]+'?t='+new Date().getTime();window.location.replace(newUrl);sessionStorage.setItem('hasReloaded','true');}else{sessionStorage.removeItem('hasReloaded');}



</script>





<div id="tableContainer" style="display: none;">
    <table>
        <thead>
    <tr>
	<th>ویرایش</th>
	<th>حذف</th>
        <th>شماره<br>ردیف</th>
<th>شماره<br>چک</th>
<th>تاریخ</th>
<th>مبلغ</th>
<th>شاخص<br>سررسید</th>
<th>آخرین<br>شاخص</th>
<th>اصل<br>و خسارت</th>


    </tr>
</thead>

        <tbody id="tableBody">
            <!-- ردیف‌ها به صورت داینامیک اضافه خواهند شد -->
        </tbody>
    </table>
</div>


<div class="box" id="outputText"></div>

<script>
function executeFunctionsInOrder() {
  // فراخوانی تابع clearColumns
  clearColumns();

  // فراخوانی تابع formatDateAndSearchInList
  formatDateAndSearchInList();

  // فراخوانی تابع updateRowNumbers
  updateRowNumbers();

  // فراخوانی تابع sumNumbersWithComma
  sumNumbersWithComma();
}

</script>

<script>
function sumNumbersWithComma() {
  // دسترسی به جدول با شناسه tableBody
  const tableBody = document.getElementById("tableBody");
  
  // جمع‌کردن اعداد با کاما
  let sum = 0;
  const rows = tableBody.getElementsByTagName("tr");

  for (let row of rows) {
    const cells = row.getElementsByTagName("td");

    for (let cell of cells) {
      const cellText = cell.textContent.trim();
      
      // بررسی اینکه آیا متن سلول عدد با کاما است
      if (/^\d{1,3}(?:,\d{3})*$/.test(cellText)) {
        // حذف کاما و تبدیل به عدد
        const number = parseInt(cellText.replace(/,/g, ""), 10);
        sum += number;
      }
    }
  }

  // اضافه کردن ردیف جدید برای مجموع
  const newRow = tableBody.insertRow(tableBody.rows.length);
  
  // ایجاد ۸ سلول اول با مقدار "مجموع"
  const newCell = newRow.insertCell(0); // اضافه کردن یک سلول جدید
  newCell.textContent = "مجموع اصل و خسارت تمامی چک ها"; // قرار دادن متن در سلول
  newCell.colSpan = 8; // سلول به اندازه ۸ ستون گسترش می‌یابد

  // ایجاد سلول نهم برای نمایش مجموع
  const sumCell = newRow.insertCell(1); // سلول دوم برای مجموع
  sumCell.textContent = sum.toLocaleString(); // نمایش عدد با کاما

  // اضافه کردن ردیف جدید برای نیم عشر دولتی
  const secondRow = tableBody.insertRow(tableBody.rows.length);
  
  // ایجاد ۸ سلول اول برای "نیم عشر دولتی"
  const newCell2 = secondRow.insertCell(0);
  newCell2.textContent = "نیم عشر دولتی"; // قرار دادن متن در سلول
  newCell2.colSpan = 8; // سلول به اندازه ۸ ستون گسترش می‌یابد

  // ایجاد سلول نهم برای نمایش نیم عشر دولتی
  const halfSumCell = secondRow.insertCell(1); // سلول دوم برای نیم عشر دولتی
  const halfSum = sum / 20; // تقسیم مجموع بر ۲۰
  halfSumCell.textContent = halfSum.toLocaleString(); // نمایش نیم عشر با کاما
  // اسکرول به پایین به آخرین ردیف جدول
        tableBody.lastElementChild.scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" });

}

</script>
<script>
function executeAllActions(tableBody, totalZ2, totalExtraAmount) {
    // پاک کردن ستون‌ها یا ردیف‌های قبلی
    
	formatDateAndSearchInList();
	
   
    // جمع‌کردن مقادیر جدول
    sumTableValues();

    // به‌روزرسانی شماره ردیف‌ها
    updateRowNumbers();
	
	 // اضافه کردن ردیف‌های مربوط به جمع کل
    addTotalZ2Row(tableBody, totalZ2);
	 
    addTotalAmountRow(tableBody, totalZ2, totalExtraAmount);
    addTotalAmount1Row(tableBody, totalZ2, totalExtraAmount);

}
</script>






<script>
 // به روز رسانی شماره ردیف ها
function updateRowNumbers() {
    // گرفتن تمام ردیف‌های جدول
    var rows = document.querySelectorAll('#tableBody tr');
    
    // مرور بر روی تمام ردیف‌ها و به‌روزرسانی شماره ردیف در ستون سوم
    rows.forEach(function(row, index) {
        var cell = row.cells[2]; // ستون سوم
        if (cell) {
            cell.textContent = index + 1; // شماره ردیف از 1 شروع می‌شود
        }
    });
}

// فرض کنید که شما تابعی برای حذف ردیف دارید که بعد از حذف ردیف فراخوانی می‌شود.
function deleteRow(rowIndex) {
    var table = document.getElementById('tableBody');
    table.deleteRow(rowIndex);
    
    // بعد از حذف ردیف، شماره ردیف‌ها به‌روز می‌شود
    executeFunctionsInOrder();

}

</script>


<script>
// تشکیل جدول اصلی
    function processText() {
        var inputText = document.getElementById("inputText").value;
        var tableBody = document.getElementById("tableBody");
        tableBody.innerHTML = ""; // پاک کردن جدول برای داده‌های جدید

        // متغیر برای جمع کردن مقادیر ستون z2
        let totalZ2 = 0;

        // الگویی برای پیدا کردن شماره چک، تاریخ و مبلغ
        var text = `اینجا متن شما قرار می‌گیرد. هر تعداد چک با الگوهای مختلف را اضافه کنید.`;

       

		var regex = /(?:چک|چك)\s*(?:به شماره|شماره)?\s*([\d\/]+)?\s*(?:مورخه|مورخ)?\s*([\d\/]+)?\s*(?:به مبلغ|مبلغ)?\s*([\d,\/\.]+)\s*(?:ريال|ریال)?|(?:چک|چك)\s*(?:به شماره|شماره)?\s*([\d\/]+)?\s*(?:به مبلغ|مبلغ)?\s*([\d,\/\.]+)\s*(?:مورخه|مورخ)?\s*([\d\/]+)?\s*(?:ريال|ریال)?/g;


        let matches;
        var checks = [];

       while ((matches = regex.exec(text)) !== null) {  // اجرای حلقه تا زمانی که مطابقت‌های جدید از متن پیدا شود.
    var checkNumber = matches[1]?.trim() || "نامشخص";  // استخراج شماره چک و حذف فضاهای اضافی، در صورت عدم وجود، "نامشخص" قرار می‌دهیم.
    var date = matches[2]?.trim() || "نامشخص";  // استخراج تاریخ و حذف فضاهای اضافی، در صورت عدم وجود، "نامشخص" قرار می‌دهیم.
    var amount = matches[3]  // استخراج مبلغ.
        ?.replace(/,/g, '')  // حذف کاماها از مبلغ.
        .replace(/\//g, '')  // حذف اسلش‌ها از مبلغ.
        .replace(/ ريال/g, '')  // حذف کلمه "ریال" از مبلغ.
        .trim() || "0";  // حذف فضاهای اضافی و در صورت عدم وجود مقدار، "0" قرار می‌دهیم.

    checks.push({  // افزودن یک شیء جدید به آرایه `checks` با مقادیر استخراج‌شده.
        checkNumber,  // شماره چک.
        date,  // تاریخ.
        amount: parseFloat(amount) || 0,  // تبدیل مبلغ به عدد اعشاری، در صورت عدم موفقیت مقدار 0 قرار می‌دهیم.
    });
}


        

        let match;

        // پردازش متن
        let rowNumber = 1; // شمارنده برای شماره ردیف‌ها
        while ((match = regex.exec(inputText)) !== null) {
            var row = document.createElement("tr");
var table = document.getElementById("tableBody"); // شناسه جدول شما
var row = document.createElement("tr"); // ایجاد ردیف جدید

// اضافه کردن سلول شماره ردیف به اولین ستون
var rowNumberCell = document.createElement("td");

// ایجاد دکمه با علامت ضربدر
var crossButton = document.createElement("button");
crossButton.textContent = "×"; // علامت ضربدر به عنوان متن دکمه
crossButton.classList.add("cross-button"); // اضافه کردن کلاس برای استایل دهی

// ایجاد دکمه جدید برای عملکرد ویرایش (علامت مداد)
var editButton = document.createElement("button");
editButton.innerHTML = "&#9998;"; // علامت مداد به عنوان محتوای دکمه
editButton.classList.add("edit-button"); // اضافه کردن کلاس برای استایل دهی

// اضافه کردن دکمه‌ها به سلول
var buttonCell = document.createElement("td");
buttonCell.appendChild(crossButton);
buttonCell.appendChild(editButton);


// اضافه کردن event listener برای دکمه ویرایش
editButton.addEventListener("click", function() {
    // نمایش پیغام تایید از کاربر
    var confirmEdit = confirm("آیا می خواهید این ردیف را ویرایش کنید؟");
    
    // اگر کاربر تایید کرد، تابع updateTable اجرا می‌شود
    if (confirmEdit) {
       executeFunctionsInOrder();

	   
    }
});
// اضافه کردن سلول به ردیف
row.appendChild(rowNumberCell);
row.appendChild(buttonCell);

// اضافه کردن ردیف به جدول
table.appendChild(row);


// اضافه کردن event listener برای حذف ردیف
crossButton.addEventListener("click", function() {
    // نمایش پیغام تایید قبل از حذف ردیف
    var confirmDelete = confirm("آیا می خواهید این ردیف را حذف کنید؟");
    if (confirmDelete) {
        // حذف ردیف والد دکمه
        this.closest("tr").remove(); 
		 executeFunctionsInOrder();

    }
});

// اضافه کردن دکمه به سلول
rowNumberCell.appendChild(crossButton);

// اضافه کردن سلول به ردیف
row.appendChild(rowNumberCell);

// اضافه کردن ردیف به جدول
table.appendChild(row);




          // اضافه کردن سلول شماره ردیف به اولین ستون
var rowNumberCell = document.createElement("td");  // ایجاد یک سلول جدید برای شماره ردیف.
rowNumberCell.textContent = rowNumber++;  // تنظیم محتوای سلول به شماره ردیف و سپس افزایش آن.
row.appendChild(rowNumberCell);  // اضافه کردن سلول شماره ردیف به ردیف.

var checkNumberCell = document.createElement("td");  // ایجاد سلول جدید برای شماره چک.
var dateCell = document.createElement("td");  // ایجاد سلول جدید برای تاریخ.
var amountCell = document.createElement("td");  // ایجاد سلول جدید برای مبلغ.
var mohamadCell = document.createElement("td");  // ایجاد سلول جدید برای ستون "سررسید".
var lastIndexCell = document.createElement("td");  // ایجاد سلول جدید برای "آخرین شاخص".

           var checkNumberInput = document.createElement("input");
checkNumberInput.type = "text";
checkNumberInput.value = match[1]; // شماره چک
checkNumberInput.className = "editable-date"; // کلاس برای اعمال استایل دلخواه
checkNumberCell.appendChild(checkNumberInput); // اضافه کردن عنصر ورودی به سلول

            var rawDate = match[2] || "نامشخص"; // تاریخ خام
         

		 var dateInput = document.createElement("input");
			dateInput.type = "text";
			dateInput.value = formatDate(rawDate); // مقدار اولیه تاریخ
			dateInput.className = "editable-date"; // کلاس برای اعمال استایل دلخواه
			dateCell.appendChild(dateInput); // اضافه کردن عنصر ورودی به سلول



           var amountInput = document.createElement("input");
			amountInput.type = "text";
			amountInput.value = formatAmount(match[3]); // مقدار اولیه مبلغ
			amountInput.className = "editable-amount"; // کلاس برای اعمال استایل دلخواه
			amountCell.appendChild(amountInput); // اضافه کردن عنصر ورودی به سلول


            // اضافه کردن مقدار ثابت 1339.1 به ستون "آخرین شاخص"
            lastIndexCell.textContent = aa111; // مقدار ثابت

            // جستجو برای پیدا کردن مقدار مربوط به تاریخ
            var dateValue = extractYearMonth(rawDate); // فقط سال و ماه برای جستجو
            var matchedData = list.find(item => item.number === dateValue); // تطابق با شماره
            var mohamadValue = matchedData ? matchedData.value : 0; // اگر هیچ مقداری پیدا نشد، مقدار پیش‌فرض 0 قرار می‌دهیم
            mohamadCell.textContent = mohamadValue || "0"; // قرار دادن مقدار "0" در صورت عدم وجود مقدار معتبر
// محاسبه مقدار z1 (بدون نمایش ستون)
var z1Value = parseFloat(lastIndexCell.textContent) / parseFloat(mohamadValue || 1);  // تقسیم مقدار موجود در سلول `lastIndexCell` بر `mohamadValue` (اگر مقدار نداشته باشد، مقدار پیش‌فرض 1 استفاده می‌شود).

// محاسبه مقدار z2 و ایجاد یک سلول برای آن
var z2Cell = document.createElement("td");  // ایجاد یک سلول جدید برای نمایش مقدار `z2`.
var z2Value = parseFloat(z1Value) * parseFloat(amountCell.querySelector("input").value.replace(/,/g, '') || 1);  // محاسبه مقدار `z2` با ضرب `z1Value` در مقدار ورودی که از داخل سلول `amountCell` گرفته می‌شود (کاراکترهای کاما حذف می‌شوند و اگر ورودی خالی باشد، مقدار پیش‌فرض 1 استفاده می‌شود).

z2Cell.textContent = z2Value.toLocaleString('en-US', { maximumFractionDigits: 0 });  // نمایش مقدار `z2` با فرمت جداکننده هزارگان و بدون اعشار در سلول.

            // جمع کردن مقدار z2
            totalZ2 += z2Value;

            // اضافه کردن سلول‌ها به ردیف
            row.appendChild(checkNumberCell);
            row.appendChild(dateCell);
            row.appendChild(amountCell);
            row.appendChild(mohamadCell); // اضافه کردن سلول "سررسید"
            row.appendChild(lastIndexCell); // اضافه کردن سلول "آخرین شاخص"
            row.appendChild(z2Cell); // اضافه کردن سلول "z2"
            tableBody.appendChild(row);
        }

        // استخراج هزینه دادرسی و حق الوکاله
        var costPattern = /هزینه دادرسی\s*(\d[\d,]*)\s*ریال/;
        var lawyerFeePattern = /(\d[\d,]*)\s*ریال\s*حق الوکاله/;

        var costMatch = inputText.match(costPattern);
        var lawyerFeeMatch = inputText.match(lawyerFeePattern);

        // اضافه کردن ردیف هزینه دادرسی و حق الوکاله
     // اضافه کردن ردیف هزینه دادرسی و حق الوکاله
// اضافه کردن ردیف هزینه دادرسی و حق الوکاله
let totalExtraAmount = 0;  // برای نگهداری مجموع هزینه‌ها

if (costMatch || lawyerFeeMatch) {  // بررسی اینکه آیا یکی از شرایط هزینه دادرسی یا حق الوکاله مطابقت دارد.
    var extraRow = document.createElement("tr");  // ایجاد یک ردیف جدید برای اضافه کردن مقادیر هزینه‌ها.

    if (costMatch) {  // اگر هزینه دادرسی مطابقت دارد.
        var costCell = document.createElement("td");  // ایجاد یک سلول جدید برای برچسب "هزینه دادرسی".
        costCell.innerHTML = "هزینه<br>دادرسی";  // تنظیم متن سلول به "هزینه دادرسی".

        // فرمت کردن مبلغ با کاما
        var costAmount = parseFloat(costMatch[1]);  // تبدیل مبلغ هزینه دادرسی به عدد اعشاری.
        totalExtraAmount += costAmount;  // اضافه کردن مبلغ هزینه به مجموع `totalExtraAmount`.

        var costAmountCell = document.createElement("td");  // ایجاد یک سلول جدید برای نمایش مبلغ هزینه.
        costAmountCell.textContent = costAmount.toLocaleString();  // نمایش مبلغ با فرمت جداکننده هزارگان.

        extraRow.appendChild(costCell);  // اضافه کردن سلول برچسب به ردیف.
        extraRow.appendChild(costAmountCell);  // اضافه کردن سلول مبلغ به ردیف.
    }

    if (lawyerFeeMatch) {  // اگر حق الوکاله مطابقت دارد.
        var lawyerFeeCell = document.createElement("td");  // ایجاد یک سلول جدید برای برچسب "حق الوکاله".
        lawyerFeeCell.innerHTML = "حق<br>الوکاله";  // تنظیم متن سلول به "حق الوکاله".

        // فرمت کردن مبلغ با کاما
        var lawyerFeeAmount = parseFloat(lawyerFeeMatch[1]);  // تبدیل مبلغ حق الوکاله به عدد اعشاری.
        totalExtraAmount += lawyerFeeAmount;  // اضافه کردن مبلغ حق الوکاله به مجموع `totalExtraAmount`.

        var lawyerFeeAmountCell = document.createElement("td");  // ایجاد یک سلول جدید برای نمایش مبلغ حق الوکاله.
        lawyerFeeAmountCell.textContent = lawyerFeeAmount.toLocaleString();  // نمایش مبلغ با فرمت جداکننده هزارگان.

        extraRow.appendChild(lawyerFeeCell);  // اضافه کردن سلول برچسب به ردیف.
        extraRow.appendChild(lawyerFeeAmountCell);  // اضافه کردن سلول مبلغ به ردیف.
    }


    tableBody.appendChild(extraRow); // اضافه کردن ردیف به جدول
}

addTotalZ2Row(tableBody, totalZ2);
addTotalAmountRow(tableBody, totalZ2, totalExtraAmount);
addTotalAmount1Row(tableBody, totalZ2, totalExtraAmount);

     

// نمایش جدول در صورت یافتن حداقل یک تطابق
document.getElementById("tableContainer").style.display = tableBody.rows.length > 0 ? "block" : "none";
 // اسکرول به پایین به آخرین ردیف جدول
        tableBody.lastElementChild.scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" });

		
    }
</script>

<script>
// تابع برای اضافه کردن ردیف مجموع اصل و خسارت تمامی چک ها
function addTotalZ2Row(tableBody, totalZ2) {
    if (tableBody && tableBody.rows.length > 0 && !isNaN(totalZ2)) {  
        var totalZ2Row = document.createElement("tr");  
        
        var totalZ2LabelCell = document.createElement("td");  
        totalZ2LabelCell.colSpan = 8;  
        totalZ2LabelCell.textContent = "مجموع اصل و خسارت تمامی چک ها";  

        var totalZ2Cell = document.createElement("td");  
        totalZ2Cell.textContent = totalZ2.toLocaleString('en-US', { maximumFractionDigits: 0 });  

        totalZ2Row.appendChild(totalZ2LabelCell);  
        totalZ2Row.appendChild(totalZ2Cell);  
        tableBody.appendChild(totalZ2Row);  
    } else {
        console.error("مشکلی در ارسال داده‌ها یا ساختار جدول وجود دارد");
    }
}
</script>

<script>
// تابع برای اضافه کردن ردیف مجموع اصل و خسارت ها و هزینه های جانبی
function addTotalAmountRow(tableBody, totalZ2, totalExtraAmount) {
    if (tableBody.rows.length > 0) {  
        var totalRow = document.createElement("tr");  
        var totalLabelCell = document.createElement("td");  
        totalLabelCell.colSpan = 8;  
        totalLabelCell.textContent = "مجموع اصل و خسارت ها و هزینه های جانبی:";  

        var totalAmountCell = document.createElement("td");  
        var totalAmount = totalZ2 + totalExtraAmount;  
        totalAmountCell.textContent = totalAmount.toLocaleString('en-US', { maximumFractionDigits: 0 });  

        totalRow.appendChild(totalLabelCell);  
        totalRow.appendChild(totalAmountCell);  
        tableBody.appendChild(totalRow);  
    }
}
</script>
<script>
// تابع برای اضافه کردن ردیف نیم عشر دولتی
function addTotalAmount1Row(tableBody, totalZ2, totalExtraAmount) {
    if (tableBody.rows.length > 0) {  
        var totalRow = document.createElement("tr");  
        var totalLabelCell = document.createElement("td");  
        totalLabelCell.colSpan = 8;  
        totalLabelCell.textContent = "نیم عشر دولتی:";  

        var totalAmountCell = document.createElement("td");  
        var totalAmount1 = (totalZ2 + totalExtraAmount) / 20;  
        totalAmountCell.textContent = totalAmount1.toLocaleString('en-US', { maximumFractionDigits: 0 });  

        totalRow.appendChild(totalLabelCell);  
        totalRow.appendChild(totalAmountCell);  
        tableBody.appendChild(totalRow);  
    }
}

</script>





<script>
//اصلاح فرمت تاریخ
   function formatDate(rawDate) {  // تعریف تابع formatDate که تاریخ خام (rawDate) را به عنوان ورودی می‌گیرد.
    if (rawDate === "نامشخص") return "نامشخص";  // اگر ورودی "نامشخص" باشد، تابع همین مقدار را برمی‌گرداند.

    // بررسی و تبدیل فرمت‌های مختلف
    var parts = rawDate.split("/");  // تاریخ ورودی را با استفاده از علامت اسلش ("/") به اجزاء (روز، ماه، سال) تقسیم می‌کند.
    if (parts.length === 3) {  // اگر تعداد اجزاء تاریخ سه باشد (یعنی تاریخ به فرمت درست وارد شده است).
        var year = parts[0].length === 4 ? parts[0] : parts[2];  // اگر سال چهار رقم باشد، آن را به عنوان سال در نظر می‌گیرد، در غیر این صورت از قسمت سوم (سال) استفاده می‌کند.
        var month = parts[1].padStart(2, "0");  // ماه را به صورت دو رقمی با صفر پیشوند قالب‌بندی می‌کند.
        var day = parts[0].length === 4 ? parts[2].padStart(2, "0") : parts[0].padStart(2, "0");  // روز را به صورت دو رقمی با صفر پیشوند قالب‌بندی می‌کند، بسته به اینکه سال در کدام بخش از تاریخ باشد.
        return `${year}/${month}/${day}`;  // تاریخ را به فرمت "YYYY/MM/DD" باز می‌گرداند.
    }
    return rawDate;  // در صورت عدم شناسایی فرمت، تاریخ به صورت اصلی بازگردانده می‌شود.
}

</script>



<script>
// تبدیل فرمت تاریخ از مثلا 1402/05/06 به 140205
    // تابعی برای استخراج فقط سال و ماه از تاریخ
 function extractYearMonth(rawDate) {  // تعریف تابع extractYearMonth که تاریخ خام (rawDate) را به عنوان ورودی می‌گیرد.
    if (rawDate === "نامشخص") return "نامشخص";  // اگر ورودی "نامشخص" باشد، تابع همین مقدار را برمی‌گرداند.
    
    var parts = rawDate.split("/");  // تاریخ ورودی را با استفاده از علامت اسلش ("/") به اجزاء (روز، ماه، سال) تقسیم می‌کند.

    // حذف روز و بک‌اسلش‌ها
    if (parts.length === 3) {  // اگر تعداد اجزاء تاریخ سه باشد (یعنی تاریخ به فرمت درست وارد شده است).
        var year = parts[0].length === 4 ? parts[0] : parts[2];  // اگر سال چهار رقم باشد، آن را به عنوان سال در نظر می‌گیرد، در غیر این صورت از قسمت سوم (سال) استفاده می‌کند.
        var month = parts[1].padStart(2, "0");  // ماه را به صورت دو رقمی با صفر پیشوند قالب‌بندی می‌کند.
        return `${year}${month}`;  // سال و ماه را به هم متصل کرده و به فرمت "YYYYMM" برمی‌گرداند.
    }
    return "نامشخص";  // اگر فرمت تاریخ صحیح نباشد، "نامشخص" را برمی‌گرداند.
}

</script>


<script>
  // تابعی برای قالب‌بندی مبلغ
function formatAmount(amount) {  // تعریف تابع formatAmount که ورودی آن مقدار مبلغ (amount) است.
    var isRial = amount.includes("ریال");  // بررسی اینکه آیا رشته ورودی شامل کلمه "ریال" است یا خیر.
    let numericAmount = amount.replace(/[^\d]/g, "");  // حذف تمام کاراکترهای غیرعددی از مبلغ با استفاده از یک عبارت منظم.
    
    // قالب‌بندی برای افزودن کاما
    numericAmount = numericAmount.replace(/\B(?=(\d{3})+(?!\d))/g, ",");  // افزودن کاما به مبلغ برای جدا کردن هر سه رقم از هم.
    return numericAmount;  // برگرداندن مبلغ قالب‌بندی شده.
}

</script>






<script>
function addRow() {
  var tableBody = document.getElementById('tableBody');
  var rowCount = tableBody.rows.length;

  // اضافه کردن ردیف جدید در جایگاه دوم از آخر
  var newRow = (rowCount < 2) ? tableBody.insertRow() : tableBody.insertRow(rowCount - 2);

  var crossButton = document.createElement("button");
  crossButton.textContent = "×";
  crossButton.classList.add("cross-button");

  var editButton = document.createElement("button");
  editButton.innerHTML = "&#9998;";
  editButton.classList.add("edit-button");

  editButton.addEventListener("click", function () {
    var confirmEdit = confirm("آیا می خواهید این ردیف را ویرایش کنید؟");
    if (confirmEdit) {
     executeFunctionsInOrder();

    }
  });

  crossButton.addEventListener("click", function () {
    var confirmDelete = confirm("آیا می خواهید این ردیف را حذف کنید؟");
    if (confirmDelete) {
      this.closest("tr").remove();
      sumTableValues();
      updateRowNumbers();
    }
  });

  var cell1 = newRow.insertCell(0);
  var cell2 = newRow.insertCell(1);
  var cell3 = newRow.insertCell(2);

  cell1.appendChild(editButton);
  cell2.appendChild(crossButton);

  cell3.innerHTML = rowCount + 1;

for (var i = 3; i < 9; i++) {
    var cell = newRow.insertCell(i);

    if (i === 3 || i === 4 || i === 5) {
        var input = document.createElement("input");
        input.type = "text";
        input.placeholder = "مقدار وارد کنید";

        // افزودن کلاس‌ها به ورودی‌ها
        if (i === 3) {
            input.classList.add("editable-date");
        } else if (i === 4) {
            input.classList.add("editable-date");
        } else if (i === 5) {
            input.classList.add("editable-date");
        }

        cell.appendChild(input);
    } else if (i === 7) {
        cell.innerHTML = 1339.1;
    } else {
        cell.innerHTML = 0;
    }
}

updateRowNumbers();

}
</script>
<script>
// بروزرسانی ردیف ها
function updateRowNumbers() {
  var tableBody = document.getElementById('tableBody');
  var rows = tableBody.rows;
  for (var i = 0; i < rows.length; i++) {
    rows[i].cells[2].innerHTML = i + 1;
  }
}


</script>


 


<script>
 // نمایش نتیجه در دو ردیف اخر
function sumTableValues() {
  const tableBody = document.getElementById("tableBody"); // انتخاب بدنه جدول
  const rows = tableBody.getElementsByTagName("tr"); // انتخاب تمامی ردیف‌ها
  let totalSum = 0; // متغیر برای نگهداری مجموع کل

  // بررسی تعداد ردیف‌ها
  const totalRows = rows.length;

  // مرور هر ردیف و جمع کردن مقادیر ستون آخر
  for (let i = 0; i < totalRows - 2; i++) {  // تغییر این خط برای نادیده گرفتن دو ردیف آخر
    const cells = rows[i].getElementsByTagName("td"); // انتخاب سلول‌ها در هر ردیف

    // بررسی اگر سلول‌ها موجود باشند
    if (cells.length > 0) {
      // دسترسی به آخرین سلول
      let value = cells[cells.length - 1]?.innerText.trim();

      // حذف کاراکترهای غیر عددی (مانند ویرگول، فاصله و ...)
      value = value.replace(/[^0-9.-]+/g, "");

      // بررسی اینکه آیا مقدار عددی است
      if (!isNaN(value) && value !== "") {
        totalSum += parseFloat(value); // تبدیل به عدد و اضافه کردن به مجموع
      }
    }
  }

  // انتخاب ردیف دوم از آخر برای نمایش نتیجه
  const rowToUpdate = rows[totalRows - 2]; // انتخاب ردیف یکی مانده به آخر
  const cellsInRow = rowToUpdate.getElementsByTagName("td"); // انتخاب سلول‌های ردیف

  // اضافه کردن نتیجه به آخرین سلول ردیف انتخابی
  const lastCellInRow = cellsInRow[cellsInRow.length - 1]; // آخرین سلول
  lastCellInRow.colSpan = 9; // تنظیم colspan
  lastCellInRow.style.textAlign = "center"; // تنظیم تراز متن در مرکز
  lastCellInRow.innerHTML = ` ${totalSum.toLocaleString()}`; // نمایش نتیجه جمع در قالب خوانا

  // اضافه کردن نتیجه به آخرین ردیف
  const lastRow = rows[totalRows - 1]; // انتخاب آخرین ردیف
  const lastRowCells = lastRow.getElementsByTagName("td"); // انتخاب سلول‌های آخرین ردیف

  // پیدا کردن آخرین سلول در آخرین ردیف و اضافه کردن نتیجه
  const lastCellInLastRow = lastRowCells[lastRowCells.length - 1]; // آخرین سلول
  lastCellInLastRow.colSpan = 9; // تنظیم colspan برای تراز کردن نتیجه
  lastCellInLastRow.style.textAlign = "center"; // تنظیم تراز متن در مرکز
  lastCellInLastRow.innerHTML = ` ${totalSum.toLocaleString()}`; // نمایش نتیجه جمع در قالب خوانا
}
</script>











<script>
// خالی کردن ستون 7 و 9 و سلول دوم سه ردیف انتهایی و حذف سه ردیف آخر
function clearColumns() {
  // گرفتن tbody جدول
  const tableBody = document.getElementById("tableBody");

  // گرفتن تمامی ردیف‌ها
  const rows = tableBody.getElementsByTagName("tr");

  // پیمایش در ردیف‌ها برای خالی کردن ستون‌های ۷ و ۹
  for (let i = 0; i < rows.length; i++) {
    // گرفتن سلول‌های هر ردیف
    const cells = rows[i].getElementsByTagName("td");

    // اگر سلول‌ها وجود دارند، ستون‌های ۷ و ۹ را پاک کن
    if (cells.length > 8) {
      cells[6].innerHTML = ""; // ستون ۷
      cells[8].innerHTML = ""; // ستون ۹
    }
  }

  // خالی کردن سلول دوم در سه ردیف انتهایی
  const totalRows = rows.length; // تعداد کل ردیف‌ها
  for (let i = totalRows - 3; i < totalRows; i++) { // سه ردیف آخر
    const cells = rows[i].getElementsByTagName("td");

    // اگر سلول دوم وجود دارد، آن را پاک کن
    if (cells.length > 1) {
      cells[1].innerHTML = ""; // سلول دوم
    }
  }

  // حذف سه ردیف آخر
  const rowsToDelete = 3; // تعداد ردیف‌هایی که باید حذف شوند
  for (let i = 0; i < rowsToDelete; i++) {
    if (rows.length > 0) {
      tableBody.deleteRow(rows.length - 1); // حذف آخرین ردیف
    }
  }

  /*formatDateAndSearchInList()*/
}

</script>



<script>
//پیدا کردن شاخص سررسید
function formatDateAndSearchInList() {
  // گرفتن tbody جدول
  const tableBody = document.getElementById("tableBody");

  // گرفتن تمامی ردیف‌ها
  const rows = tableBody.getElementsByTagName("tr");

  // آرایه list که در فایل p8x4l5s3.js قرار دارد
  

  // پیمایش در ردیف‌ها
  for (let i = 0; i < rows.length; i++) {
    // گرفتن سلول‌های هر ردیف
    const cells = rows[i].getElementsByTagName("td");

    // اگر ستون ۵ (input تاریخ) و ستون ۷ وجود داشته باشند
    if (cells.length > 6) {
      // پیدا کردن input در ستون ۵
      const inputElement = cells[4].querySelector("input");

      // اگر input وجود داشته باشد، مقدار آن را استخراج کنیم
      if (inputElement) {
        let dateValue = inputElement.value; // گرفتن مقدار تاریخ از input

        // جدا کردن سال، ماه و روز از تاریخ
        const dateParts = dateValue.split('/'); // جدا کردن اجزای تاریخ با استفاده از '/'
        if (dateParts.length === 3) {
          const year = dateParts[0]; // گرفتن سال کامل
          const month = dateParts[1].padStart(2, '0'); // اطمینان از اینکه ماه دو رقمی باشد

          // ترکیب سال و ماه به فرمت دلخواه (سال کامل و ماه)
          const formattedDate = year + month; // ترکیب سال و ماه

          // جستجو در لیست برای پیدا کردن مقدار value
          const foundItem = list.find(item => item.number === formattedDate);
          
          // اگر مقداری پیدا شد
          if (foundItem) {
            // قرار دادن مقدار value در ستون ۷
            cells[6].innerText = foundItem.value;
          } else {
            // اگر چیزی پیدا نشد، ستون ۷ را خالی بگذارید یا پیام دلخواه نمایش دهید
            cells[6].innerText = "مقدار پیدا نشد";
          }
        }
      }
    }
  }
  calculateAndWriteInColumn9()
}






</script>




<script>
// جدول نوشتن خسارت تاخیر
function calculateAndWriteInColumn9() {
  
  const tableBody = document.getElementById("tableBody");

  // گرفتن تمامی ردیف‌ها
  const rows = tableBody.getElementsByTagName("tr");

  // پیمایش در ردیف‌ها
  for (let i = 0; i < rows.length; i++) {
    // گرفتن سلول‌های هر ردیف
    const cells = rows[i].getElementsByTagName("td");

    // اگر ستون‌های ۷، ۸ و ۶ (input عدد) وجود داشته باشند
    if (cells.length > 8) {
      const column7 = parseFloat(cells[6].innerText); // عدد در ستون ۷
      const column8 = parseFloat(cells[7].innerText); // عدد در ستون ۸
      const inputElement = cells[5].querySelector("input"); // پیدا کردن input در ستون ۶

      // اگر input در ستون ۶ وجود داشته باشد و اعداد صحیح باشند
      if (inputElement && !isNaN(column7) && !isNaN(column8)) {
        // حذف کاما از ورودی ستون ۶ و تبدیل آن به عدد
        const column6Value = parseFloat(inputElement.value.replace(/,/g, ''));

        // انجام محاسبه: (ستون ۸ ÷ ستون ۷) × ستون ۶
        const result = Math.round((column8 / column7) * column6Value); // محاسبه و گرد کردن نتیجه

        // تبدیل نتیجه به فرمت هزارگان
        const formattedResult = result.toLocaleString('en-US'); // فرمت به صورت هزارگان و انگلیسی

        // قرار دادن نتیجه در ستون ۹
        cells[8].innerText = formattedResult; // نتیجه را در ستون ۹ قرار می‌دهیم
      } else {
        // اگر ورودی صحیح نبود، مقدار ستون ۹ را خالی می‌گذاریم
        cells[8].innerText = "مقدار صحیح نیست";
      }
    }
  }
}



</script>

<script>

function showTooltip1010() {
    var tooltip1 = document.getElementById("tooltip1");

    if (!tooltip1) {
        // ایجاد دیو tooltip1
        tooltip1 = document.createElement("div");
        tooltip1.style.textAlign = "justify";
        tooltip1.id = "tooltip1";
        tooltip1.className = "box4";

        tooltip1.innerHTML = `
            <button class="close-btn1" onclick="showTooltip1010()">×</button>
           
            
           <p>شما ابتدا اجرائیه را کپی و در این  ورودی پست(وارد) نماید</p>
         
            
           <p>در نهایت روی دکمه محاسبه بزنید</p>
            
           <p>در صورت اینکه می خواهید برگه جلب صادر شود روی دکمه ان بزنید</p>
           
           <p>و اگر خواستید که متن درون برگه جلب کپی شود روی دکمه کپی بزنید</p>
           <p>و النهایه متن جلب کپی شده را درون سامانه دستگاه قضائی وارد نماید</p>
		 
	 
		  
        
      
        
        `;

        document.body.appendChild(tooltip1); // افزودن دیو به بدنه صفحه
        tooltip1.style.display = "block"; // نمایش دیو
        tooltip1.scrollIntoView({ behavior: 'smooth' }); // اسکرول به دیو
    } else {
        // اگر دیو وجود دارد، آن را مخفی کن
        tooltip1.style.display = tooltip1.style.display === "none" ? "block" : "none";
    }
}

</script>



 <script>
function updateTextWithTableData() {
    // دریافت تگ tbody جدول با id "tableBody"
    var tableBody = document.getElementById("tableBody");
    
    // دریافت تمامی ردیف‌ها
    var rows = tableBody.getElementsByTagName("tr");
    
    // بررسی اینکه تعداد ردیف‌ها بیشتر از 1 باشد
    if (rows.length > 1) {
        // دریافت مقدار آخرین ستون در ردیف یکی مانده به آخر
        var secondLastValue = rows[rows.length - 2].cells[rows[rows.length - 2].cells.length - 1].innerText;
        // دریافت مقدار آخرین ستون در ردیف آخر
        var lastValue = rows[rows.length - 1].cells[rows[rows.length - 1].cells.length - 1].innerText;

        // اگر داده‌ها موجود بودند، متن را نمایش می‌دهیم
        if (secondLastValue && lastValue) {
            var fullText = `
                برگه جلب سراسری محکوم همراه نیابت سراسری<br>
                کلیه مامورین انتظامی سراسر کشور<br>
                محکوم علیه فوق الذکر محکوم است به پرداخت مبلغ <span style="color: red; font-weight: bold;">${secondLastValue}</span> ریال در حق محکوم له و لذا پس از رویت فورا با هماهنگی مقام قضائی محکوم علیه جلب و به این اجرای احکام اعزام گردد. 
                در صورت نیاز به ورود به مخفیگاه از طلوع خورشید تا ساعت 22 با استفاده از کلیدساز برای 3 نوبت با رعایت موازین شرعی و قانونی بلامانع است. قابل ذکر است در صورت پرداخت محکوم به و یا اخذ رضایت محکوم له، مراتب صورت‌جلسه و محکوم علیه آزاد گردد و برگه جلب بلا اقدام عودت گردد.
                در صورتیکه در نوبت اول و یا دوم جلب میسر نگردید مراتب صورت‌جلسه و گزارش و در برگه جلب منعکس گردد، لکن برگه جلب به دارنده آن تحویل تا امکان جلب برای بار دوم و یا سوم باشد.
                ضمنا مبلغ <span style="color: red; font-weight: bold;">${lastValue}</span> ریال نیم عشر دولتی می‌باشد.<br><br>
                روسای محترم حوزه‌های قضائی سراسر کشور<br>
                نظر به صدور جلب به شرح فوق مستدعی است در صورت جلب محکوم علیه فوق به نیابت از این اجرا شخصا و یا با ارجاع امر به احدی از همکاران محترم قضایی با داشتن کلیه اختیارات قانونی، در صورت اخذ رضایت محکوم له و یا واریز مبلغ محکوم به حساب سپرده دادگستری و یا معرفی مالی که تکافوی محکوم به را بنماید، مجلوب آزاد گردد و نتیجه به این اجرای احکام گزارش گردد.
                در غیر این صورت به این اجرای احکام اعزام گردد.
                در صورت معرفی مال سهل البیع، ضمن ارجاع امر به کارشناسی و انجام مراحل قانونی آزادی نامبرده بلامانع می‌باشد.
                کلیه اختیارات در خصوص برگزاری مزاید و تفویض مزایده به آن مرجع محترم تفویض می‌گردد.
                رمز ... و ... .
            `;
            
            // نمایش متن در کنسول یا جایگذاری در المان HTML
            console.log(fullText); // برای مشاهده در کنسول
            document.getElementById("outputText").innerHTML = fullText; // برای نمایش در یک المان HTML با id "outputText"

            // فراخوانی تابع کپی متن بعد از نمایش
             
			 document.getElementById('outputText').scrollIntoView({ behavior: 'smooth' });
        } else {
            console.log("مقادیر ردیف‌ها صحیح نیستند.");
        }
    } else {
        console.log("تعداد ردیف‌ها کمتر از 2 است.");
    }
}

function copyText() {
    // پیدا کردن دیو که متن درون آن قرار دارد
    var textToCopy = document.getElementById('outputText').innerText;

    // ایجاد یک عنصر مخفی <textarea> برای کپی کردن متن
    var tempTextArea = document.createElement('textarea');
    tempTextArea.value = textToCopy; // مقدار متن را درون textarea قرار می‌دهیم
    tempTextArea.style.position = 'absolute'; // پنهان کردن textarea
    tempTextArea.style.left = '-9999px'; // قرار دادن خارج از دید کاربر
    document.body.appendChild(tempTextArea); // اضافه کردن به سند

    // انتخاب متن و تلاش برای کپی کردن آن
    tempTextArea.select();
    try {
        var successful = document.execCommand('copy'); // متد قدیمی کپی
        if (successful) {
            showMessage('متن با موفقیت کپی شد!', 'green'); // پیام موفقیت
        } else {
            showMessage('خطا در کپی متن!', 'red'); // پیام خطا
        }
    } catch (err) {
        showMessage('کپی کردن متن پشتیبانی نمی‌شود!', 'red');
    }

    // حذف عنصر موقت
    document.body.removeChild(tempTextArea);
}

// تابع نمایش پیام به کاربر
function showMessage(messageText, color) {
    var newDiv = document.getElementById('outputText');
    var message = document.createElement('p');
    message.textContent = messageText;
    message.style.color = color; // تنظیم رنگ پیام
    message.style.fontWeight = 'bold';
    message.style.marginBottom = '10px'; // فاصله از متن اصلی

    // افزودن پیام به بالای محتوا
    newDiv.insertBefore(message, newDiv.firstChild);

    // حذف پیام بعد از 2 ثانیه
    setTimeout(function () {
        newDiv.removeChild(message);
    }, 2000);
	document.getElementById('outputText').scrollIntoView({ behavior: 'smooth' });
}


</script>

   
<script>
function addCommas(input) {
    // بررسی وجود input
    if (!input || !input.value) {
        alert('ورودی معتبر نیست.');
        return; // خروج از تابع در صورت عدم وجود ورودی
    }

    // حذف ویرگول‌های موجود در مقدار ورودی
    var value = input.value.replace(/,/g, ''); // استفاده از var به جای var برای سازگاری بیشتر

    // بررسی اینکه ورودی تنها شامل اعداد است
    if (/^\d*\.?\d*$/.test(value)) {
        // تبدیل مقدار ورودی به عدد
        var number = parseFloat(value);

        // اگر مقدار ورودی یک عدد معتبر است
        if (!isNaN(number)) {
            // تبدیل مقدار ورودی به رشته با ویرگول بین هر سه رقم
            var formattedNumber = number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');

            // تنظیم مقدار ورودی به شکل با ویرگول‌ها
            input.value = formattedNumber;
        }
    } else {
        // اخطار به کاربر در صورت ورود حروف
        alert('لطفاً فقط عدد وارد کنید.');
        input.value = ''; // پاک کردن ورودی
    }
}

</script>
	
  
	<script type="text/javascript" src="../js/p8x4l5s3.js"></script>
    <script type="text/javascript" src="../js/x7k5v8b2.js"></script>
    <script type="text/javascript" src="../js/z3t7n8w5.js"></script>
    <script src="../js/jalaali.min.js"></script> 
	
</body>
</html>
