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 }