Woocommerce Sales Widget (Current month and Year) - iOS, Scriptable
November 4, 2020 · View on GitHub
// Variables used by Scriptable. // These must be at the very top of the file. Do not edit. // icon-color: yellow; icon-glyph: stats;
/**
- Display Woocommerce Sales for current month
- Widget made by Oliver Kehl - www.olikdesign.de
- WIDGET CONFIGURATION */
// Your website URL e.g. https://yourdomain.com const website = "https://yourdomain.de" // Your website name const websiteName = "Webseite" // Your Woocommerce REST-API Key and Secret ( You need to enable the REST-API Settings! ) const key = "YOUR_API_KEY" const secret = "YOUR_API_SECRET" // Styling const fontName = "Futura-Medium" const bgcolor = new Color("FFBF07") const fontColor = new Color("273540") const mainfontColor = new Color("fff") // Calculate with Tax var with_tax = true; //Currency var currency = "\u20AC" // Euro-Sign: \u20AC
/**
- DON'T EDIT after this line
- ---------------------------------------------------------- * */ // Get Date formats var date = new Date(); var currentDate = new Date() var day = currentDate.getDate() var month = currentDate.getMonth() + 1 var year = currentDate.getFullYear() var todaysdate = year + "-" + month + "-" + day var currentYear = date.getFullYear(); var currentmonth = ("0" + (date.getMonth() + 1)).slice(-2); var monthName = date.toLocaleString('default', { month: 'long' });
// API Folder const folder = "reports/sales" // Generate Api URL const apifilter = "filter[date_min]=" + currentYear + "-01-01&filter[date_max]=" + todaysdate const reportsUrl = website + "/wc-api/v2/" + folder + "?" + apifilter + "&consumer_key=" + key + "&consumer_secret=" + secret const reportsRequest = new Request(reportsUrl) const reportsData = await reportsRequest.loadJSON() // Get Api Data var salesreport = reportsData.sales
if (config.runsInWidget) { // create and show widget let widget = createWidget() Script.setWidget(widget) Script.complete() }
function createWidget() {
let widget = new ListWidget() widget.setPadding(16, 16, 16, 0) widget.backgroundColor = bgcolor
let header = widget.addText(websiteName.toUpperCase()) header.font = Font.boldSystemFont(14) header.textColor = fontColor
let headerSubRow = widget.addStack() let headerSubStack = headerSubRow.addStack() headerSubStack.layoutHorizontally() headerSubStack.centerAlignContent()
let headersub = headerSubStack.addText("Umsatz".toUpperCase()) headersub.font = Font.regularSystemFont(12) headersub.textColor = fontColor headerSubStack.addSpacer(8)
widget.addSpacer()
// Get orders for current month const salesReportTotalsEntries = Object.entries(salesreport.totals); const salesReportTotalOrders = salesReportTotalsEntries.reduce((a, v) => { const currentMonthOrders = v[0].split('-')[1]; if (!a[currentMonthOrders]) { a[currentMonthOrders] = Number(v[1].orders); return a; } a[currentMonthOrders] += Number(v[1].orders); return a; }, {}); const showcurrentMonthOrders = salesReportTotalOrders[currentmonth]
// Get sales for month const salesReportTotalsByMonths = salesReportTotalsEntries.reduce((a, v) => { const currentMonthSales = v[0].split('-')[1]; if (!a[currentMonthSales]) { a[currentMonthSales] = Number(v[1].sales); return a; } a[currentMonthSales] += Number(v[1].sales); return a; }, {}); const showcurrentMonthsales = salesReportTotalsByMonths[currentmonth]
// Get sales for current month shipping const salesReportShippingByMonths = salesReportTotalsEntries.reduce((a, v) => { const currentMonthSalesShipping = v[0].split('-')[1]; if (!a[currentMonthSalesShipping]) { a[currentMonthSalesShipping] = Number(v[1].shipping); return a; } a[currentMonthSalesShipping] += Number(v[1].shipping); return a; }, {}); const showcurrentMonthsalesShipping = salesReportShippingByMonths[currentmonth] const showcurrentMonthsalesNet = showcurrentMonthsales - showcurrentMonthsalesShipping const currentMonthNet = Number(Math.round(showcurrentMonthsalesNet+'e2')+'e-2')
// Get current month Tax const salesReportTaxByMonths = salesReportTotalsEntries.reduce((a, v) => { const currentMonthTax = v[0].split('-')[1]; if (!a[currentMonthTax]) { a[currentMonthTax] = Number(v[1].tax); return a; } a[currentMonthTax] += Number(v[1].tax); return a; }, {}); const showcurrentMonthTax = salesReportTaxByMonths[currentmonth] const showcurrentMonthTaxShipNet = showcurrentMonthsales - showcurrentMonthsalesShipping - showcurrentMonthTax const currentMonthNetTax = Number(Math.round(showcurrentMonthTaxShipNet+'e2')+'e-2')
// check if sales are more than last month const lastmonthnumber = ("0" + (date.getMonth())).slice(-2); const lastmonth = salesReportTotalsByMonths[lastmonthnumber]
function arrowDown() { let arrowDownIcon = SFSymbol.named('arrow.down.right'); let arrowDownIconElement = headerSubStack.addImage(arrowDownIcon.image) arrowDownIconElement.imageSize = new Size(10, 10) arrowDownIconElement.tintColor = Color.red() } function arrowUp() { let arrowUpIcon = SFSymbol.named('arrow.up.right'); let arrowUpIconElement = headerSubStack.addImage(arrowUpIcon.image) arrowUpIconElement.imageSize = new Size(10, 10) arrowUpIconElement.tintColor = Color.green() } // Display arrow behind subtitle if (currentmonth > lastmonth) { arrowUp() } else { arrowDown() }
// Show current month orders quantity let ordersRow = widget.addStack() let ordersStack = ordersRow.addStack() ordersStack.layoutHorizontally() ordersStack.centerAlignContent() ordersStack.backgroundColor = Color.white() ordersStack.setPadding(4, 4, 4, 4) ordersStack.cornerRadius = 4
let OrdersIcon = SFSymbol.named('tray.and.arrow.down.fill'); let OrdersIconElement = ordersStack.addImage(OrdersIcon.image) OrdersIconElement.imageSize = new Size(12, 12) OrdersIconElement.tintColor = fontColor
ordersStack.addSpacer(4)
let totalMonthOrders = ordersStack.addText(showcurrentMonthOrders + " Bestellung(en)") totalMonthOrders.font = Font.mediumSystemFont(10) totalMonthOrders.textColor = fontColor
// Show current month gross let totalMonthGross = widget.addText(showcurrentMonthsales.toFixed(2).toString().replace(".",",") + " " + currency) totalMonthGross.font = new Font(fontName, 25) totalMonthGross.textColor = mainfontColor totalMonthGross.leftAlignText()
// Generate Tax Variable var currentMonth_tax_or_not = ""; if(with_tax) { var currentMonth_tax_or_not = currentMonthNetTax; } else { var currentMonth_tax_or_not = currentMonthNet; } let totalMonthGrosstitle = widget.addText(monthName.toUpperCase() + " — " + currentMonth_tax_or_not.toString().replace(".",",") + " " + currency) totalMonthGrosstitle.font = Font.boldSystemFont(9) totalMonthGrosstitle.textColor = fontColor
// Show years total gross let totalYearGross = widget.addText(salesreport.total_sales.replace(".",",") + " " + currency) totalYearGross.font = new Font(fontName, 20) totalYearGross.textColor = mainfontColor totalYearGross.leftAlignText()
let totalYearGrosstitle = widget.addText("Jahr — ".toUpperCase() + salesreport.net_sales.replace(".",",") + " " + currency) totalYearGrosstitle.font = Font.boldSystemFont(9) totalYearGrosstitle.textColor = fontColor
widget.presentSmall() return widget }