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>
<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
Post a Comment