diff --git a/package.json b/package.json index c0d3395..07906d9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "am2-assist", "description": "Airlines Manager 2 Assist", - "version": "1.0.10", + "version": "1.0.11", "scripts": { "build": "webpack", "build:dev": "webpack --d", diff --git a/src/plugins/aircraftListProDisplay.ts b/src/plugins/aircraftListProDisplay.ts index ec1ff5e..e778edf 100644 --- a/src/plugins/aircraftListProDisplay.ts +++ b/src/plugins/aircraftListProDisplay.ts @@ -23,6 +23,7 @@ class AirCraftInfo { public age: string; public detailsUrl: string; public avatarUrl: string; + public aircraftId: string; // Lease-only public securityDeposit: string; @@ -45,6 +46,7 @@ function extractInfo(): Array { info.name = box.find('div.title span.editAircraftName'); info.categoryIcon = box.find('div.title img').get(0).outerHTML; info.detailsUrl = box.find('div.title a:not(.useAjax)').attr('href')!; + info.aircraftId = info.detailsUrl.split('/')[3]; if (!isRentalPage) { info.range = box.find('span.listBoxInfo:eq(0) b').text(); @@ -75,6 +77,76 @@ function extractInfo(): Array { return result; } +function addCssClass() { + const style = $(` + + `); + style.appendTo('head'); +} + +async function extractToken(aircraftId: string) { + const sellResp = await fetch(`/aircraft/show/${aircraftId}/sell`); + if (sellResp.status !== 200) { + return undefined; + } + const sellPageHtml = await sellResp.text(); + const pricePage = $($.parseHTML(sellPageHtml)); + const token = pricePage.find('#form__token'); + if (token.length === 0) { + return undefined; + } else { + assert(token.length === 1); + assert(token.attr('value')); + return token.attr('value'); + } +} + +async function sellAircraft(aircraftId: string) { + const token = await extractToken(aircraftId); + if (!token) { + return; + } + + const sellAircraftFormData = new FormData(); + sellAircraftFormData.append('form[_token]', token); + + const priceUpdateResp = await fetch(`/aircraft/show/${aircraftId}/sell`, { method: 'POST', body: sellAircraftFormData }); + if (priceUpdateResp.status !== 200) { + updateStatus(aircraftId, false); + } else { + updateStatus(aircraftId, true); + } +} + +function updateStatus(aircraftId: string, successful: boolean) { + let line; + if (successful) { + line = $(`Sold`); + } else { + line = $(`Failed`); + } + const position = $(`#${aircraftId}`).parent(); + line.insertAfter(position); +} + +async function retiredStaff() { + const url = '/staff/automatic-retire/aircraft'; + await fetch(url, { method: 'GET'}); +} + function constructTable(list: Array): JQuery { const result = $(` @@ -108,7 +180,7 @@ function constructTable(list: Array): JQuery { list.forEach((info: AirCraftInfo) => { const row = $(isRentalPage ? ` - @@ -120,11 +192,12 @@ function constructTable(list: Array): JQuery { + ` : ` - - + + `); @@ -228,8 +302,22 @@ export const aircraftListProDisplay: Plugin = { } // UI tweaks + addCssClass(); $('div.hubFilterBox').css('margin-bottom', 0); $('div.aircraftListView').css('margin-top', 0); $('div.cleaner').remove(); + + $('.BtnDetailAvionProSell').click(function() { + console.log('Sell Aircraft Button Clicked'); + const useage = $(this).parent().parent().find('#aircraftUsage'); + console.log(useage); + const aircraftId = $(this).attr('id'); + if (aircraftId) { + console.log(aircraftId); + sellAircraft(aircraftId); + retiredStaff(); + } + return false; + }); } };
+ ${info.type} ${info.hubName} / ${info.hubFlag}${info.debitDate}   
+ ${info.categoryIcon} @@ -133,12 +206,13 @@ function constructTable(list: Array): JQuery { ${info.hubName} / ${info.hubFlag} ${info.range}${info.use}${info.use} ${info.wear} ${info.age} ${info.seats} Pax / ${info.cargo} ${info.flightResults}