Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
- <title>Converter</title>
- </head>
- <body>
- <div class="container">
- <div id="main">
- <h4 class="text-center mb-3">Main Menu</h4>
- <div class="form-group row mb-2 mt-4">
- <button onclick="showPicker()" class="btn btn-secondary">Edit Collection</button>
- </div>
- <div class="form-group row mb-2">
- <button onclick="showReportMenu()" class="btn btn-secondary">Reports</button>
- </div>
- </div>
- <div id="picker" class="d-none">
- <h4 class="text-center mb-3">Select Item to Edit</h4>
- <div class="form-group row mb-2">
- <label for="itempicker" class="col-sm-3 col-form-label text-end">Item to edit</label>
- <div class="col-sm-9"><select onChange="showEditor()" id="itempicker" class="form-select"></select></div>
- </div>
- <div class="form-group row mt-5">
- <div class="col-sm-3"></div>
- <button onclick="addItem()" class="btn btn-secondary col-sm-3">Add Item</button>
- <div class="col-sm-1"></div>
- <button onclick="showMainMenu()" class="btn btn-secondary col-sm-3">Main Menu</button>
- </div>
- </div>
- <div id="editor" class="d-none">
- <h4 class="text-center mb-3">Edit Collections</h4>
- <form id="editorForm" class="needs-validation" novalidate>
- <div class="form-group row mb-2">
- <label for="title" class="col-sm-4 col-form-label text-end">Title</label>
- <div class="col-sm-8"><input onchange="updateCollection('title')" id="title" class="form-control" required></div>
- </div>
- <div class="form-group row mb-2">
- <label for="details" class="col-sm-4 col-form-label text-end">Details</label>
- <div class="col-sm-8"><input onchange="updateCollection('details')" id="details" class="form-control"></div>
- </div>
- <div class="form-group row mb-2">
- <label for="purchaseDate" class="col-sm-4 col-form-label text-end">Purchase Date</label>
- <div class="col-sm-8"><input type="date" onchange="updatePurchaseDate()" id="purchaseDate" class="form-control" required></div>
- </div>
- <div class="form-group row mb-2">
- <label for="purchasePrice" class="col-sm-4 col-form-label text-end">Purchase Price</label>
- <div class="col-sm-8"><input onchange="updateCollection('purchasePrice')" pattern="^[0-9]*(\.[0-9][0-9])?$" id="purchasePrice" class="form-control" required></div>
- </div>
- <div class="form-group row mb-2">
- <label for="saleDate" class="col-sm-4 col-form-label text-end">Sale Date</label>
- <div class="col-sm-8"><input type="date" onchange="updateSaleDate()" id="saleDate" class="form-control"></div>
- </div>
- <div class="form-group row mb-2">
- <label for="salePrice" class="col-sm-4 col-form-label text-end">Sale Price</label>
- <div class="col-sm-8"><input onchange="updateCollection('salePrice')" pattern="^[0-9]*(\.[0-9][0-9])?$" id="salePrice" class="form-control"></div>
- </div>
- <div class="form-group row mt-5">
- <div class="col-sm-4"></div>
- <button onclick="deleteEditing()" class="btn btn-secondary col-sm-3">Delete</button>
- <div class="col-sm-1"></div>
- <button onclick="doneEditing()" class="btn btn-secondary col-sm-3">Save</button>
- </div>
- </form>
- </div>
- <div id="reportMenu" class="d-none">
- <h4 class="text-center mb-3">Report Menu</h4>
- <div class="form-group row mb-2 mt-4">
- <button onclick="showAssetReport()" class="btn btn-secondary">Report Current Assets</button>
- </div>
- <div class="form-group row mb-5">
- <button onclick="showSalesReport()" class="btn btn-secondary">Report Sales</button>
- </div>
- <div class="form-group row mb-2">
- <button onclick="showMainMenu()" class="btn btn-secondary">Main Menu</button>
- </div>
- </div>
- <div id="reportBody" class="d-none">
- <h4 id="reportBodyTitle" class="text-center mb-3">Report</h4>
- <div id="reportBodyContent">
- </div>
- <div class="form-group row mt-5">
- <button onclick="showReportMenu()" class="btn btn-secondary">Close</button>
- </div>
- </div>
- </div>
- <script language="javascript">
- /* bootstrap validation enable */
- function formValidate(formId)
- {
- const form=document.getElementById(formId);
- form.classList.add('was-validated');
- return form.checkValidity();
- }
- /* data */
- //const collections = [ {title:"1999 Jimmy steward album",details:"",condition:"good",purchasePrice:1.22, purchaseDate:"", salePrice: "", saleDate:""},
- // {title:"justice for all album",details:"original print",condition:"good",purchasePrice:11.22, purchaseDate:"", salePrice: "", saleDate:""}
- // ];
- let collections = [];
- init();
- function init()
- {
- const jsonCollections=localStorage.getItem("collections");
- if (jsonCollections != null)
- collections=JSON.parse(jsonCollections);
- }
- /* ui */
- function showMainMenu()
- {
- setClassById("main","d-block");
- setClassById("editor","d-none");
- setClassById("picker","d-none");
- setClassById("reportMenu","d-none");
- }
- function showPicker()
- {
- setClassById("main","d-none");
- setClassById("editor","d-none");
- setClassById("picker","d-block");
- const itemPicker=document.getElementById("itempicker");
- clearElement(itemPicker);
- addOption(itemPicker,-1,"");
- for (let i=0; i<collections.length; i++)
- addOption(itemPicker,i,collections[i].title);
- }
- function addItem()
- {
- const itemPicker=document.getElementById("itempicker");
- addOption(itemPicker,collections.length,"");
- itemPicker.value=collections.length;
- collections.push({title:"",details:"",condtion:"",purchasePrice:"", purchaseDate:"", salePrice: "", saleDate:""});
- showEditor();
- }
- function showEditor()
- {
- const form=document.getElementById("editorForm");
- form.className="needs-validation";
- const itemPicker = document.getElementById("itempicker");
- if (itemPicker.value==-1) return;
- setClassById("main","d-none");
- setClassById("picker","d-none");
- setClassById("editor","d-block");
- setInputFromCollection(["title","details","purchasePrice","purchaseDate","salePrice","saleDate"]);
- const title = document.getElementById("title");
- title.value=collections[itemPicker.value].title;
- const details = document.getElementById("details");
- details.value=collections[itemPicker.value].details;
- }
- function setInputFromCollection(fieldList)
- {
- const itemPicker = document.getElementById("itempicker");
- for (let i=0; i<fieldList.length; i++)
- {
- const domObject = document.getElementById(fieldList[i]);
- domObject.value=collections[itemPicker.value][fieldList[i]];
- }
- adjustSalePriceInput();
- adjustSaleDateInput();
- }
- function updatePurchaseDate()
- {
- updateCollection('purchaseDate');
- adjustSaleDateInput();
- }
- function adjustSaleDateInput()
- {
- const itemPicker = document.getElementById("itempicker");
- const saleDate = document.getElementById("saleDate");
- saleDate.min = collections[itemPicker.value].purchaseDate;
- }
- function updateSaleDate()
- {
- updateCollection('saleDate');
- adjustSalePriceInput();
- }
- function adjustSalePriceInput()
- {
- const itemPicker = document.getElementById("itempicker");
- const salePrice = document.getElementById("salePrice");
- salePrice.required= (collections[itemPicker.value].saleDate.length>0);
- salePrice.disabled = (!salePrice.required);
- if (salePrice.disabled)
- {
- salePrice.value="";
- collections[itemPicker.value].salePrice="";
- }
- }
- function updateCollection(fieldName)
- {
- const itemPicker = document.getElementById("itempicker");
- const domObject = document.getElementById(fieldName);
- collections[itemPicker.value][fieldName] = domObject.value;
- }
- function doneEditing()
- {
- stopSubmit();
- if (formValidate("editorForm"))
- {
- localStorage.setItem("collections",JSON.stringify(collections));
- showPicker();
- }
- }
- function deleteEditing()
- {
- stopSubmit();
- const itemPicker = document.getElementById("itempicker");
- collections.splice(itemPicker.value,1);
- showPicker();
- }
- /* reports */
- function showReportMenu()
- {
- setClassById("main","d-none");
- setClassById("reportMenu","d-block");
- setClassById("reportBody","d-none");
- }
- function showAssetReport()
- {
- const report = newReport("Asset Report");
- addReportHeader(report,[{className:"col-sm-8", title:"Title"},{className:"col-sm-2", title:"Purchase Date"},{className:"col-sm-2", title:"Purchase Price"}]);
- let total=0;
- for (let i=0; i<collections.length; i++)
- {
- if (collections[i].saleDate.length<=0)
- {
- const reportRow=addReportRow(report);
- addReportColumn(reportRow,"col-sm-8",collections[i].title);
- addReportColumn(reportRow,"col-sm-2",collections[i].purchaseDate);
- addReportColumn(reportRow,"col-sm-2",Number(collections[i].purchasePrice).toFixed(2));
- total = total + Number(collections[i].purchasePrice);
- }
- }
- if (total>0)
- {
- const reportRow=addReportRow(report);
- addReportColumn(reportRow,"col-sm-2 bg-light","TOTAL");
- addReportColumn(reportRow,"col-sm-8","");
- addReportColumn(reportRow,"col-sm-2 bg-light",total.toFixed(2));
- }
- }
- function showSalesReport()
- {
- const report = newReport("Sales Report");
- addReportHeader(report,[{className:"col-sm-5", title:"Title"},
- {className:"col-sm-2", title:"Purchase Date"},{className:"col-sm-1", title:"Purchase Price"},
- {className:"col-sm-2", title:"Sale Date"},{className:"col-sm-1", title:"Sale Price"},
- {className:"col-sm-1", title:"Gain Loss"}]);
- let totalPurchase=0;
- let totalSale=0;
- let totalGain=0;
- for (let i=0; i<collections.length; i++)
- {
- if (collections[i].saleDate.length>0)
- {
- const reportRow=addReportRow(report);
- const gain = Number(collections[i].salePrice) - Number(collections[i].purchasePrice);
- addReportColumn(reportRow,"col-sm-5",collections[i].title);
- addReportColumn(reportRow,"col-sm-2",collections[i].purchaseDate);
- addReportColumn(reportRow,"col-sm-1",Number(collections[i].purchasePrice).toFixed(2));
- addReportColumn(reportRow,"col-sm-2",collections[i].saleDate);
- addReportColumn(reportRow,"col-sm-1",Number(collections[i].salePrice).toFixed(2));
- addReportColumn(reportRow,"col-sm-1",gain.toFixed(2));
- totalPurchase = totalPurchase + Number(collections[i].purchasePrice);
- totalSale = totalSale + Number(collections[i].salePrice);
- totalGain = totalGain + gain;
- }
- }
- if (totalPurchase>0)
- {
- const reportRow=addReportRow(report);
- addReportColumn(reportRow,"col-sm-2 bg-light","TOTAL");
- addReportColumn(reportRow,"col-sm-5","");
- addReportColumn(reportRow,"col-sm-1 bg-light",totalPurchase.toFixed(2));
- addReportColumn(reportRow,"col-sm-2","");
- addReportColumn(reportRow,"col-sm-1 bg-light",totalSale.toFixed(2));
- addReportColumn(reportRow,"col-sm-1 bg-light",totalGain.toFixed(2));
- }
- }
- function newReport(title)
- {
- setClassById("reportMenu","d-none");
- setClassById("reportBody","d-block");
- setReportTitle(title);
- const report = document.getElementById("reportBodyContent");
- clearElement(report);
- return report;
- }
- function setReportTitle(title)
- {
- const reportTitle = document.getElementById("reportBodyTitle");
- reportTitle.innerHTML=title;
- }
- function addReportHeader(report,headers)
- {
- const reportRow=addReportRow(report);
- for (let i=0; i<headers.length; i++)
- addReportColumn(reportRow,headers[i].className+" bg-light",headers[i].title);
- }
- function addReportRow(report)
- {
- const reportRow = document.createElement("div");
- reportRow.className="form-group row mb-2";
- report.appendChild(reportRow);
- return reportRow;
- }
- function addReportColumn(reportRow,className,content)
- {
- const reportCol = document.createElement("div");
- reportCol.className=className;
- reportCol.innerHTML=content;
- reportRow.appendChild(reportCol);
- return reportCol;
- }
- /* utils */
- function stopSubmit()
- {
- event.preventDefault();
- event.stopPropagation();
- }
- function setClassById(id,className)
- {
- let domObject = document.getElementById(id);
- setClass(domObject,className);
- }
- function setClass(domObject,className)
- {
- domObject.className=className;
- }
- function clearElementById(id)
- {
- let domObject = document.getElementById(id);
- clearElement(domObject);
- }
- function clearElement(domObject)
- {
- while (domObject.firstChild)
- domObject.removeChild(domObject.firstChild);
- }
- function addOption(domSelect,value,label)
- {
- let option = document.createElement('option');
- option.value=value;
- option.innerHTML=label;
- domSelect.appendChild(option);
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement