Custom Date Rang HTML d365

 


Copy code in VS and save as HTML

<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    <link href="https://cdn.datatables.net/1.10.1/css/jquery.dataTables.css" rel="stylesheet" id="datatable-css">
    <link href="https://cdn.datatables.net/responsive/1.0.0/css/dataTables.responsive.css" rel="stylesheet" id="datatable-responsive-css">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/1.3.1/css/toastr.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="https://cdn.datatables.net/1.10.1/js/jquery.dataTables.min.js"></script>
    <script type="text/javascript" src="ClientGlobalContext.js.aspx"></script>
    <script>
        var startDate;
        var enDate;
        let currentYearStart = new Date(2025, 6, 1); // 1 July 2025 (month is 0-based)
        let baseDate = new Date(2025, 6, 1); // Base year reference

        $(document).ready(function () {
            Onload();
        });

        function Onload() {
            LoadTerritory();
            updateDisplay();
            getProgramburnratereportData();
        }
        function getProgramburnratereportData() {
            var startDate = $("#StartDate").html();
            var enDate = $("#EndDate").html();

            const fetchXml = `<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
                                                          <entity name="ecl_programburnratereport">
                                                            <attribute name="ecl_programburnratereportid" />
                                                            <attribute name="ecl_newcolumn" />
                                                            <attribute name="createdon" />
                                                            <attribute name="statuscode" />
                                                            <attribute name="statecode" />
                                                            <attribute name="ecl_serviceterritory" />
                                                            <attribute name="overriddencreatedon" />
                                                            <attribute name="ecl_program" />
                                                            <attribute name="ecl_packagesprice" />
                                                            <attribute name="owningbusinessunit" />
                                                            <attribute name="ownerid" />
                                                            <attribute name="modifiedon" />
                                                            <attribute name="modifiedonbehalfby" />
                                                            <attribute name="modifiedby" />
                                                            <attribute name="ecl_indicativenumberofpackages" />
                                                            <attribute name="createdonbehalfby" />
                                                            <attribute name="createdby" />
                                                            <attribute name="ecl_contracttotal" />
                                                            <attribute name="ecl_contracttodate" />
                                                            <attribute name="ecl_contractfromdate" />
                                                            <filter type="and">
                                                              <condition attribute="ecl_contractfromdate" operator="on-or-after" value="${formatDateToYMD(startDate)}" />
                                                              <condition attribute="ecl_contracttodate" operator="on-or-before" value="${formatDateToYMD(enDate)}" />
                                                            </filter>
                                                          </entity>
                                                        </fetch>`;

            var encodedFetch = "?fetchXml=" + encodeURIComponent(fetchXml);

            Xrm.WebApi.retrieveMultipleRecords("ecl_programburnratereport", encodedFetch).then(
                function success(results) {
                    if (results != null && results.entities.length > 0) {
                        var arrayObj = results.entities;
                        $('#tblBurnRateReport tr').each(function (rowIndex) {
                            rowIndex = rowIndex + 1;
                            var territory = $("#row_" + rowIndex + "_col_1").val();
                            var program = $("#row_" + rowIndex + "_col_5").val();

                            const filterobj = arrayObj.filter(p => p.ecl_program == program && p._ecl_serviceterritory_value == territory);

                            if (filterobj != null && filterobj.length > 0) {

                                var contractTotal = filterobj[0].ecl_contracttotal;
                                var packagesprice = filterobj[0].ecl_packagesprice;
                                var indicativenumberofpackages = filterobj[0].ecl_indicativenumberofpackages;
                                var guid = filterobj[0].ecl_programburnratereportid;

                                $("#hidden_row_" + rowIndex).val(guid);
                                $("#row_" + rowIndex + "_col_2").val(contractTotal);
                                $("#row_" + rowIndex + "_col_3").val(packagesprice);
                                $("#row_" + rowIndex + "_col_4").val(indicativenumberofpackages);
                            }
                        });
                    }
                    else {
                        $('#tblBurnRateReport tr').each(function (rowIndex) {
                            rowIndex = rowIndex + 1;
                            $("#row_" + rowIndex + "_col_2").val(0);
                            $("#row_" + rowIndex + "_col_3").val(0);
                            $("#row_" + rowIndex + "_col_4").val(0);
                            $("#hidden_row_" + rowIndex).val("");
                        });
                    }
                },
                function (error) {
                    console.error(error.message);
                }
            );
        }


        function getFinancialYearRange(dateInput) {
            let year = dateInput.getFullYear();

            // If before July, adjust to previous financial year
            if (dateInput.getMonth() < 6) {
                year = year - 1;
            }

            const start = new Date(year, 6, 1);      // 1 July
            const end = new Date(year + 1, 5, 30);   // 30 June
            return {
                start: formatDate(start),
                end: formatDate(end),
                startObj: start
            };
        }

        function formatDate(date) {
            const dd = String(date.getDate()).padStart(2, '0');
            const mm = String(date.getMonth() + 1).padStart(2, '0');
            const yyyy = date.getFullYear();
            return `${dd}-${mm}-${yyyy}`;
        }

        function updateDisplay() {
            const fyRange = getFinancialYearRange(currentYearStart);

            startDate = fyRange.start;
            enDate = fyRange.end;
            $('#StartDate').html(fyRange.start);
            $('#EndDate').html(fyRange.end);
        }

        function nextClick() {
            const fyRange = getFinancialYearRange(currentYearStart);
            // Move forward to next FY (add 1 year to start date)
            currentYearStart = new Date(fyRange.startObj);
            currentYearStart.setFullYear(currentYearStart.getFullYear() + 1);
            updateDisplay();
            Onload();
        }

        function PreviousClick() {
            const fyRange = getFinancialYearRange(currentYearStart);
            // Move backward to previous FY (subtract 1 year from start date)
            currentYearStart = new Date(fyRange.startObj);
            currentYearStart.setFullYear(currentYearStart.getFullYear() - 1);
            updateDisplay();
            Onload();
        }

        // Initial display
        updateDisplay();

        function LoadTerritory() {
            Xrm.WebApi.retrieveMultipleRecords("territory", "?$select=territoryid,name&$filter=ecl_parentterritoryid eq 806460003").then(
                function success(results) {
                    console.log(results);
                    for (var i = 0; i < results.entities.length; i++) {
                        var result = results.entities[i];
                        $(".territory").append($("<option></option>").val(result["territoryid"]).text(result["name"]));
                        DefaultServiceSelected();
                    }
                },
                function (error) {
                    console.log(error.message);
                }
            );
        }

        function DefaultServiceSelected() {
            $("#row_1_col_1").val("0eefd2a9-9021-f011-8c4d-00224891e8fd");
            $("#row_2_col_1").val("153a9195-0921-f011-998a-000d3ad14f3d");
            $("#row_3_col_1").val("0eefd2a9-9021-f011-8c4d-00224891e8fd");
            $("#row_4_col_1").val("153a9195-0921-f011-998a-000d3ad14f3d");
            $("#row_5_col_1").val("0eefd2a9-9021-f011-8c4d-00224891e8fd");
            $("#row_6_col_1").val("153a9195-0921-f011-998a-000d3ad14f3d");

            $("#row_7_col_1").val("167e6de1-9021-f011-8c4d-00224891e8fd");
            $("#row_8_col_1").val("167e6de1-9021-f011-8c4d-00224891e8fd");
            $("#row_9_col_1").val("167e6de1-9021-f011-8c4d-00224891e8fd");
            $("#row_10_col_1").val("153a9195-0921-f011-998a-000d3ad14f3d");
        }

        function formatDateToYMD(dateString) {
            var parts = dateString.split("-");
            if (parts.length !== 3) return "";

            var day = parts[0];
            var month = parts[1];
            var year = parts[2];

            return year + "-" + month + "-" + day;
        }


        function OOAHTextChange(obj) {
            var value = $(obj).val();
            if (value != null && value != "" && value != undefined) {
                var rowId = $(obj).data('row');
                var OOAHAllocated = $("#row_" + rowId + "_col_5").val();
                var remaining = parseInt(value) - parseInt(OOAHAllocated)
                $("#row_" + rowId + "_col_7").val(remaining)
            }

        }


        function NumberPackageOnchange(obj) {
            var value = $(obj).val();
            if (value != null && value != "" && value != undefined) {
                var rowId = $(obj).data('row');
                var LHDAllocated = $("#row_" + rowId + "_col_5").val();
                var OOAHAllocated = $("#row_" + rowId + "_col_4").val();
                var remaining = parseInt(value) - (parseInt(OOAHAllocated) + parseInt(LHDAllocated))
                $("#row_" + rowId + "_col_8").val(remaining)
            }
        }

        function Save() {
            debugger;
            var message = "";
            let promises = [];
            var isCompleted = false;
            Xrm.Utility.showProgressIndicator("Saving, please wait...");
            $('#tblBurnRateReport tr').each(function (rowIndex) {

                rowIndex = rowIndex + 1;

                var guid = $("#hidden_row_" + rowIndex).val();
                var territory = $("#row_" + rowIndex + "_col_1").val();
                var program = $("#row_" + rowIndex + "_col_5").val();
                var contractTotal = $("#row_" + rowIndex + "_col_2").val();
                var countOfPackages = $("#row_" + rowIndex + "_col_3").val();
                var indicativeNumberofPackages = $("#row_" + rowIndex + "_col_4").val();

                var record = {};
                record["ecl_ServiceTerritory@odata.bind"] = "/territories(" + territory + ")"; // Lookup
                record.ecl_program = program;
                //record.ecl_contracttotal = contractTotal; // Whole Number
                //record.ecl_packagesprice = countOfPackages; // Whole Number
                //record.ecl_indicativenumberofpackages = indicativeNumberofPackages;
                record.ecl_contracttotal = contractTotal ? parseFloat(contractTotal) : 0;
                record.ecl_packagesprice = countOfPackages ? parseFloat(countOfPackages) : 0;
                record.ecl_indicativenumberofpackages = indicativeNumberofPackages ? parseFloat(indicativeNumberofPackages) : 0;

                record.ecl_contractfromdate = new Date(formatDateToYMD($("#StartDate").text()));
                record.ecl_contracttodate = new Date(formatDateToYMD($("#EndDate").text()));
                if (guid != "" && guid != undefined) {
                    promises.push(Xrm.WebApi.updateRecord("ecl_programburnratereport", guid, record).then(
                        function success(result) {
                            var newId = result.id;

                        },
                        function (error) {
                            console.log(error.message);
                        }
                    ));
                    message = "Record updated successfully!";
                }
                else {
                    promises.push(Xrm.WebApi.createRecord("ecl_programburnratereport", record).then(
                        function success(result) {
                            var newId = result.id;

                        },
                        function (error) {
                            console.log(error.message);
                        }
                    ));
                    message = "Record saved successfully!";

                }
            });
            Promise.all(promises).then(function (results) {
                Xrm.Utility.closeProgressIndicator(); // Hide progress bar
                Xrm.Navigation.openAlertDialog({ text: message });
            }).catch(function (error) {
                Xrm.Utility.closeProgressIndicator(); // Hide progress bar
                Xrm.Navigation.openAlertDialog({ text: "Error saving some records: " + error.message });
            });
        }

    </script>

    <style>
        table.dataTable thead th, table.dataTable thead td {
            padding: 10px 18px !important;
            border-bottom: 1px solid #111111 !important;
        }
        /* Dynamics 365 OOB button style mimic */
        .d365-btn {
            background-color: #0F6CBD; /* Dynamics primary blue */
            color: #ffffff;
            border: none;
            border-radius: 2px;
            font-size: 14px;
            font-weight: 600;
            padding: 6px 16px;
            cursor: pointer;
            transition: background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
        }

            /* Hover effect */
            .d365-btn:hover {
                background-color: #0a4e91; /* Darker Dynamics blue */
            }

            /* Focus outline (keyboard accessibility) */
            .d365-btn:focus {
                outline: none;
                box-shadow: 0 0 0 2px rgba(15,108,189,0.4);
            }

            /* Disabled state */
            .d365-btn:disabled {
                background-color: #c8c6c4;
                color: #605e5c;
                cursor: not-allowed;
            }

        #btnClick {
            margin-left: auto; /* ensures button stays at right end */
        }
    </style>
    <meta>
    <meta>
    <meta>
</head>

<body style="overflow-wrap: break-word;">
    <div class="">
        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <div class="col-12 input-group">
                            <div>
                                <button id="btnPrev" class="btn" onclick="PreviousClick()">«</button>
                            </div>
                            <div style="margin: 5px;">
                                <label class="text-bold" id="StartDate"></label> - <label id="EndDate"></label>
                            </div>
                            <div>
                                <button class="btn" id="btnNext" onclick="nextClick()">»</button>
                            </div>&nbsp;&nbsp;

                            <button id="btnClick" class="d365-btn float-right" onclick="Save();">Save Changes </button>
                        </div>
                    </div>
                    <div id="tblTimeSheet_wrapper" class="dataTables_wrapper no-footer">
                        <table id="tblBurnRateReport" class="table table-border cell-border compact stripe dataTable no-footer dtr-inline" width="100%" role="grid" style="width: 100%;">
                            <thead>
                            </thead>
                            <thead>
                                <tr role="row">
                                    <th class="sorting_disabled width-30" rowspan="1" colspan="1" style="width: 541px;">Service Territory  </th>
                                    <th class="sorting_disabled width-30" rowspan="1" colspan="1" style="width: 541px;">Program  </th>
                                    <th class="sorting_disabled width-30" rowspan="1" colspan="1" style="width: 541px;">Contract Total   </th>
                                    <th class="sorting_disabled width-30" rowspan="1" colspan="1" style="width: 541px;">Package Price   </th>
                                    <th class="sorting_disabled width-30" rowspan="1" colspan="1" style="width: 541px;">Indicative Number of Packages </th>
                                </tr>
                                <!--Row 1-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_1" value="">
                                        <select class="select form-control col-11 territory" id="row_1_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="CPK,HaH" disabled="disabled" class="form-control" style="width:300px;" id="row_1_col_5">

                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_1_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_1_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_1_col_4">
                                    </td>
                                </tr>

                                <!--Row 2-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_2" value="">
                                        <select class="select form-control col-11 territory" id="row_2_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="CPK" disabled="disabled" class="form-control" style="width:300px;" id="row_2_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_2_col_2">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_2_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_2_col_4">
                                    </td>
                                </tr>

                                <!--Row 3-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_3" value="">
                                        <select class="select form-control col-11 territory" id="row_3_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="SASH" disabled="disabled" class="form-control" style="width:300px;" id="row_3_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_3_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_3_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_3_col_4">
                                    </td>
                                </tr>


                                <!--Row 4-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_4" value="">
                                        <select class="select form-control col-11 territory" id="row_4_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>
                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="SASH" disabled="disabled" class="form-control" style="width:300px;" id="row_4_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_4_col_2">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_4_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_4_col_4">
                                    </td>
                                </tr>

                                <!--Row 5-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_5" value="">
                                        <select class="select form-control col-11 territory" id="row_5_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="EOL" disabled="disabled" class="form-control" style="width:300px;" id="row_5_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_5_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_5_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_5_col_4">
                                    </td>
                                </tr>

                                <!--Row 6-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_6" value="">
                                        <select class="select form-control col-11 territory" id="row_6_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="EOL" disabled="disabled" class="form-control" style="width:300px;" id="row_6_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_6_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_6_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_6_col_4">
                                    </td>
                                </tr>


                                <!--Row 7-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_7" value="">
                                        <select class="select form-control col-11 territory" id="row_7_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="CPK" disabled="disabled" class="form-control" style="width:300px;" id="row_7_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_7_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_7_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_7_col_4">
                                    </td>
                                </tr>

                                <!--Row 8-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_8" value="">
                                        <select class="select form-control col-11 territory" id="row_8_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="SASH" disabled="disabled" class="form-control" style="width:300px;" id="row_8_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_8_col_2">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_8_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_8_col_4">
                                    </td>

                                </tr>

                                <!--Row 9-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_9" value="">
                                        <select class="select form-control col-11 territory" id="row_9_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="EOL" disabled="disabled" class="form-control" style="width:300px;" id="row_9_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_9_col_2" data-row="9">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_9_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_9_col_4">
                                    </td>
                                </tr>

                                <!--Row 10-->
                                <tr>
                                    <td>
                                        <input type="hidden" id="hidden_row_10" value="">
                                        <select class="select form-control col-11 territory" id="row_10_col_1" disabled="disabled" style="width:250px;">
                                            <option value="" selected="selected">Select Territory</option>

                                        </select>
                                    </td>
                                    <td>
                                        <input type="text" value="HiTH" disabled="disabled" class="form-control" style="width:300px;" id="row_10_col_5">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_10_col_2" data-row="10">
                                    </td>

                                    <td>
                                        <input type="number" class="form-control" id="row_10_col_3">
                                    </td>
                                    <td>
                                        <input type="number" class="form-control" id="row_10_col_4">
                                    </td>
                                </tr>
                            </thead>

                        </table>
                    </div>
                    <div class="card-body">
                        <div id="tblTimeSheet_wrapper" class="dataTables_wrapper no-footer">

                        </div>
                        <!--<button id="btnAddRow" class="btn btn-sm btn-default input-group-text">Add More</button>-->
                    </div>
                    <!--<div class="card-footer">
                        <button id="btnClick" class="d365-btn float-right" onclick="Save();">Save Changes</button>

                    </div>-->

                </div>
            </div>
        </div>
    </div>
</body>
</html>



Comments

Popular posts from this blog

Power Automate compose vs variable

Update record when checkbox checked using JavaScript and save d365

Power pages custom button add in gried