mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 06:54:18 +01:00
Adds the Orion theme and a couple of small changes to the cargo programs (#22655)
The orion theme has arrived! This theme is intentionally not using the orion colors, as I couldn't get them to look good and I found this theme to feel better for the warehouse aesthetic. Other changes include: - It is now possible to clear the currently selected/viewed order in the cargo control and cargo delivery programs. - The cargo delivery program was fixed to not crash if you clicked overview or pay before selecting an order - It is now possible to pick a theme for the program selection screen (see last image) for modular computers. This is currently only used for the operations delivery tablets. - The cargo delivery program can print invoices, if the modular computer has a nanoprinter. One was given to the delivery tablet in the HT locker. <img width="800" height="800" alt="image" src="https://github.com/user-attachments/assets/4f2de8dd-9e94-4898-9907-c97a53084771" /> <img width="800" height="800" alt="image" src="https://github.com/user-attachments/assets/afc841ca-a257-4cd0-9d9d-654ba6abe8f6" /> <img width="800" height="800" alt="image" src="https://github.com/user-attachments/assets/7d2e757e-79fb-4100-a373-9a378d18d6ec" /> <img width="1200" height="800" alt="image" src="https://github.com/user-attachments/assets/bc2da18b-1a5c-463e-a63c-a79b10de20b0" /> <img width="1200" height="800" alt="image" src="https://github.com/user-attachments/assets/441e3479-71b0-4898-a5f0-14f6441ebf97" /> <img width="575" height="700" alt="image" src="https://github.com/user-attachments/assets/25e95e1a-3b1d-4a5b-bc8f-dc01ba07c107" /> <img width="620" height="800" alt="image" src="https://github.com/user-attachments/assets/f68f6954-f077-40c7-b57d-d65e16b897ae" /> <img width="575" height="700" alt="image" src="https://github.com/user-attachments/assets/879d97d3-e5ed-499b-9e15-5459e16ee38e" /> <img width="400" height="500" alt="image" src="https://github.com/user-attachments/assets/ae7b4123-b556-438e-8d55-a826611f00bf" /> --------- Co-authored-by: Batrachophreno <batrochophreno@gmail.com>
This commit is contained in:
co-authored by
Batrachophreno
parent
1c6f0d938b
commit
45372d6f97
@@ -41,7 +41,7 @@
|
||||
data["PC_showbatteryicon"] = !!battery_module
|
||||
data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : null
|
||||
data["PC_apclinkicon"] = (tesla_link?.enabled && apc_powered) ? "charging.gif" : ""
|
||||
data["PC_device_theme"] = active_program ? active_program.tgui_theme : "scc"
|
||||
data["PC_device_theme"] = active_program ? active_program.tgui_theme : device_theme
|
||||
data["PC_ntneticon"] = get_ntnet_status_icon()
|
||||
data["PC_stationtime"] = worldtime2text()
|
||||
data["PC_stationdate"] = "[time2text(world.realtime, "DDD, Month DD")], [GLOB.game_year]"
|
||||
|
||||
@@ -79,6 +79,10 @@
|
||||
var/screensaver_light_range = 0
|
||||
var/screensaver_light_color
|
||||
var/menu_light_color
|
||||
|
||||
/// Default theme if the program doesn't set it
|
||||
var/device_theme = "scc"
|
||||
|
||||
/// Adds onto the output_message proc's range
|
||||
var/message_output_range = 0
|
||||
/// Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
|
||||
|
||||
@@ -83,6 +83,11 @@
|
||||
// Cargo Delivery
|
||||
/obj/item/modular_computer/handheld/preset/supply/cargo_delivery
|
||||
_app_preset_type = /datum/modular_computer_app_presets/cargo_delivery
|
||||
device_theme = "orion"
|
||||
|
||||
/obj/item/modular_computer/handheld/preset/supply/cargo_delivery/install_default_hardware()
|
||||
. = ..()
|
||||
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
|
||||
|
||||
// Medical
|
||||
|
||||
|
||||
@@ -12,10 +12,14 @@
|
||||
usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE | PROGRAM_TELESCREEN
|
||||
tgui_id = "CargoControl"
|
||||
|
||||
var/page = "overview_main" //overview_main - Main Menu, overview_submitted - Submitted Order Overview, overview_approved - Approved Order Overview, settings - Settings, details - order details, bounties - centcom bounties
|
||||
var/status_message //A status message that can be displayed
|
||||
var/list/order_details = list() //Order Details for the order
|
||||
var/list/shipment_details = list() //Shipment Details for a selected shipment
|
||||
//overview_main - Main Menu, overview_submitted - Submitted Order Overview, overview_approved - Approved Order Overview, settings - Settings, details - order details, bounties - centcom bounties
|
||||
var/page = "overview_main"
|
||||
//A status message that can be displayed
|
||||
var/status_message = "Awaiting input"
|
||||
//Order Details for the order
|
||||
var/list/order_details = null
|
||||
//Shipment Details for a selected shipment
|
||||
var/list/shipment_details = list()
|
||||
|
||||
/datum/computer_file/program/civilian/cargocontrol/ui_data(mob/user)
|
||||
var/list/data = initial_data()
|
||||
@@ -33,7 +37,7 @@
|
||||
data["order_submitted_number"] = submitted_orders.len
|
||||
data["order_submitted_value"] = SScargo.get_orders_value_by_status("submitted",1)
|
||||
data["order_submitted_suppliers"] = SScargo.get_order_suppliers_by_status("submitted",1)
|
||||
data["order_submitted_shuttle_time"] = SScargo.get_pending_shipment_time("submitted")
|
||||
data["order_submitted_shuttle_time"] = SScargo.get_pending_shipment_time("submitted") + SScargo.min_movetime
|
||||
data["order_submitted_shuttle_price"] = SScargo.get_pending_shipment_cost("submitted")
|
||||
if(page == "overview_submitted")
|
||||
data["order_list"] = submitted_orders
|
||||
@@ -42,7 +46,7 @@
|
||||
data["order_approved_number"] = approved_orders.len
|
||||
data["order_approved_value"] = SScargo.get_orders_value_by_status("approved",1)
|
||||
data["order_approved_suppliers"] = SScargo.get_order_suppliers_by_status("approved",1)
|
||||
data["order_approved_shuttle_time"] = SScargo.get_pending_shipment_time("approved")
|
||||
data["order_approved_shuttle_time"] = SScargo.get_pending_shipment_time("approved") + SScargo.min_movetime
|
||||
data["order_approved_shuttle_price"] = SScargo.get_pending_shipment_cost("approved")
|
||||
if(page == "overview_approved")
|
||||
data["order_list"] = approved_orders
|
||||
@@ -59,8 +63,7 @@
|
||||
if(page == "overview_delivered")
|
||||
data["order_list"] = delivered_orders
|
||||
|
||||
if(length(order_details))
|
||||
data["order_details"] = order_details
|
||||
data["order_details"] = order_details
|
||||
|
||||
if(page == "overview_shipments")
|
||||
data["shipment_list"] = SScargo.get_shipment_list()
|
||||
@@ -109,24 +112,33 @@
|
||||
//Page switch between main, submitted, approved and settings
|
||||
if("page")
|
||||
switch(params["page"])
|
||||
//Main overview page with links to the different sub overview pages - submitted, approved, shipped
|
||||
if("overview_main")
|
||||
page = "overview_main" //Main overview page with links to the different sub overview pages - submitted, approved, shipped
|
||||
page = "overview_main"
|
||||
//Overview page listing the orders that have been submitted with options to view them, approve them and reject them
|
||||
if("overview_submitted")
|
||||
page = "overview_submitted" //Overview page listing the orders that have been submitted with options to view them, approve them and reject them
|
||||
page = "overview_submitted"
|
||||
//Overview page listing the current elevator price and time as well as orders that have been approved, with options to view the details
|
||||
if("overview_approved")
|
||||
page = "overview_approved" //Overview page listing the current shuttle price and time as well as orders that have been approved, with options to view the details
|
||||
page = "overview_approved"
|
||||
//Overview page listing the orders that have been moved to the top of the cargo elevator but not delivered
|
||||
if("overview_shipped")
|
||||
page = "overview_shipped" //Overview page listing the orders that have been shipped to the station but not delivered
|
||||
page = "overview_shipped"
|
||||
//Overview page listing the orders that have been delivered
|
||||
if("overview_delivered")
|
||||
page = "overview_delivered" //Overview page listing the orders that have been delivered
|
||||
if("overview_shipments") //Overview of the shipments to / from the station
|
||||
page = "overview_delivered"
|
||||
//Overview of the shipments to / from the ship
|
||||
if("overview_shipments")
|
||||
page = "overview_shipments"
|
||||
//Settings page that allows to tweak various settings such as the cargo handling fee
|
||||
if("settings")
|
||||
page = "settings" //Settings page that allows to tweak various settings such as the cargo handling fee
|
||||
page = "settings"
|
||||
//Page listing the currently available centcom bounties
|
||||
if("bounties")
|
||||
page = "bounties" //Page listing the currently available centcom bounties
|
||||
page = "bounties"
|
||||
//fall back to overview_main if a unknown page has been supplied
|
||||
else
|
||||
page = "overview_main" //fall back to overview_main if a unknown page has been supplied
|
||||
page = "overview_main"
|
||||
return TRUE
|
||||
|
||||
//Approve a order
|
||||
@@ -170,7 +182,13 @@
|
||||
|
||||
//Clear Status Message
|
||||
if("clear_message")
|
||||
status_message = null
|
||||
status_message = "Awaiting input"
|
||||
return TRUE
|
||||
|
||||
//Clear selected order
|
||||
if("clear_order")
|
||||
order_details = null
|
||||
status_message = "Selected order cleared."
|
||||
return TRUE
|
||||
|
||||
//Change the handling fee
|
||||
@@ -252,7 +270,8 @@
|
||||
else
|
||||
computer.visible_message(SPAN_NOTICE("\The [computer] prints out paper."))
|
||||
|
||||
/datum/computer_file/program/civilian/cargocontrol/proc/post_signal(var/command) //Old code right here - Used to send a refresh command to the status screens incargo
|
||||
//Old code right here - Used to send a refresh command to the status screens incargo
|
||||
/datum/computer_file/program/civilian/cargocontrol/proc/post_signal(var/command)
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
if(!frequency)
|
||||
|
||||
@@ -74,7 +74,6 @@
|
||||
//Check if its already delivered
|
||||
if(order_details["status"] == "delivered")
|
||||
status_message = "Unable to Deliver - Order has already been delivered."
|
||||
return TRUE
|
||||
|
||||
//If a payment is not needed and we are at the status shipped, then confirm the delivery
|
||||
else if(order_details["status"] == "shipped")
|
||||
@@ -83,10 +82,9 @@
|
||||
order_details = co.get_list()
|
||||
else
|
||||
status_message = "The order is not yet shipped."
|
||||
return TRUE
|
||||
else
|
||||
status_message = "Unable to process - Network Card or Card Reader Missing"
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
if(action == "pay")
|
||||
if(computer && computer.card_slot && computer.network_card)
|
||||
@@ -144,15 +142,17 @@
|
||||
playsound(computer, 'sound/machines/chime.ogg', 50, TRUE)
|
||||
status_message = co.set_paid(GetNameAndAssignmentFromId(id_card), usr.character_id, destinationact)
|
||||
order_details = co.get_list()
|
||||
return TRUE
|
||||
else
|
||||
status_message = "Unable to process - Network Card or Card Reader Missing"
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
//But only cargo can switch between the pages
|
||||
if(!istype(I) || !I.registered_name || !(ACCESS_CARGO in I.access) || issilicon(usr))
|
||||
to_chat(usr, SPAN_WARNING("Authentication error: Unable to locate ID with appropriate access to allow this operation."))
|
||||
return
|
||||
if(action == "clear_order")
|
||||
co = null
|
||||
order_details = list()
|
||||
status_message = "Selected order cleared."
|
||||
page = "overview_main"
|
||||
return TRUE
|
||||
|
||||
if(action == "page")
|
||||
status_message = null //Null the previous status, so its not confusing
|
||||
@@ -163,15 +163,19 @@
|
||||
page = "order_overview" //Details page for a specific order - Lists the contents of the orde with the suppliers, prices and required access levels
|
||||
//Fetch the order details and store it for the order. No need to fetch it again every 2 seconds
|
||||
co = SScargo.get_order_by_id(text2num(params["order_overview"]))
|
||||
order_details = co.get_list()
|
||||
order_details = co?.get_list()
|
||||
if("order_payment")
|
||||
page = "order_payment"
|
||||
co = SScargo.get_order_by_id(text2num(params["order_payment"]))
|
||||
order_details = co.get_list()
|
||||
order_details = co?.get_list()
|
||||
else
|
||||
page = "overview_main" //fall back to overview_main if a unknown page has been supplied
|
||||
return TRUE
|
||||
|
||||
if(action == "accountselect")
|
||||
// Only cargo can switch between the paying accounts
|
||||
if(!access_check(I))
|
||||
return FALSE
|
||||
var/list/choices = assoc_to_keys(SSeconomy.department_accounts)
|
||||
choices += "Personal"
|
||||
var/dest = tgui_input_list(usr, "What account would you like to select?", "Destination Account", choices)
|
||||
@@ -179,3 +183,24 @@
|
||||
return FALSE
|
||||
destinationact = dest
|
||||
return TRUE
|
||||
|
||||
//Print functions
|
||||
if(action == "order_print")
|
||||
if(!access_check(I))
|
||||
return FALSE
|
||||
//Get the order
|
||||
var/datum/cargo_order/co = SScargo.get_order_by_id(text2num(params["order_print"]))
|
||||
if(co && computer.nano_printer)
|
||||
if(!computer.nano_printer.print_text(co.get_report_invoice(),"Order Invoice #[co.order_id]"))
|
||||
to_chat(usr, SPAN_WARNING("Hardware error: Printer was unable to print the file. It may be out of paper."))
|
||||
return
|
||||
else
|
||||
computer.visible_message(SPAN_NOTICE("\The [computer] prints out paper."))
|
||||
return TRUE
|
||||
|
||||
// Cargo access check
|
||||
/datum/computer_file/program/civilian/cargodelivery/proc/access_check(var/obj/item/card/id/I)
|
||||
if(!istype(I) || !I.registered_name || !(ACCESS_CARGO in I.access) || issilicon(usr))
|
||||
to_chat(usr, SPAN_WARNING("Authentication error: Unable to locate ID with appropriate access to allow this operation."))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
author: TheGreyWolf
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Added a new Orion theme and applied it to the cargo control, cargo order and cargo delivery programs."
|
||||
- rscadd: "Modular computers can now have a front page theme defined. Currently this is only applied to the operations delivery tablets."
|
||||
- bugfix: "Fixed some issues with the cargo programs displaying the wrong delivery time."
|
||||
- rscadd: "Added the ability to clear the currently selected order in the delivery program and cargo control program."
|
||||
- rscadd: "It is now possible to print invoices from the cargo delivery program."
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.0"
|
||||
width="187.5pt"
|
||||
height="188.25pt"
|
||||
viewBox="0 0 187.5 188.25"
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
id="svg1"
|
||||
sodipodi:docname="bg-orion3.svg"
|
||||
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="pt"
|
||||
inkscape:zoom="3.247012"
|
||||
inkscape:cx="124.88405"
|
||||
inkscape:cy="125.5"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<g
|
||||
transform="matrix(0.075,0,0,0.075,0,188.25)"
|
||||
id="g1"
|
||||
inkscape:highlight-color="#aaaaaa">
|
||||
<path
|
||||
id="path1"
|
||||
d="m 80 -2502 v 7 l 138 138 137 137 h 895 895 l 138 -138 137 -137 v -8 -7 H 1250 80 Z M 20 -1240 V -70 h 8 7 l 138 -138 137 -137 v -895 -895 L 172 -2273 35 -2410 h -8 -7 z m 2342 -1027 -132 132 v 895 895 l 135 135 135 135 v -1163 -1162 h -3 -2 z m -1641 464 -301 308 v 208 208 l 13 -8 12 -8 493 -496 492 -496 v -11 -12 h -204 -204 z m 292 291 -592 597 -1 207 v 208 h 8 9 l 786 -794 787 -794 v -11 -11 h -202 -203 z m -593 -383 v 205 h 7 7 l 198 -197 198 -197 v -8 -8 H 625 420 Z m 887 679 -787 794 v 11 11 h 203 202 l 593 -599 592 -599 v -206 -206 h -8 -9 z m 291 290 -498 503 v 11 12 h 204 204 l 301 -307 301 -307 v -208 -208 l -8 1 -7 1 z m 294 299 -212 212 v 8 7 h 220 220 v -220 -220 h -8 -7 z M 237 -152 100 -15 v 8 7 h 1170 1170 v -8 -7 L 2302 -153 2165 -290 H 1270 375 Z"
|
||||
style="opacity:0.33" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -34,6 +34,7 @@ import './styles/themes/hephaestus.scss';
|
||||
import './styles/themes/sol.scss';
|
||||
import './styles/themes/vaurca.scss';
|
||||
import './styles/themes/amberpos.scss';
|
||||
import './styles/themes/orion.scss';
|
||||
|
||||
import { setupGlobalEvents } from 'tgui-core/events';
|
||||
import { setupHotKeys } from 'tgui-core/hotkeys';
|
||||
|
||||
@@ -115,7 +115,7 @@ export const CargoControl = (props) => {
|
||||
// FUCK THE WAY THESE FUCKING TOPIC CALLS WERE MADE
|
||||
// THIS BULLSHIT GAVE ME ARTHRITIS
|
||||
return (
|
||||
<NtosWindow resizable width={1200} height={800}>
|
||||
<NtosWindow resizable width={1200} height={800} theme="orion">
|
||||
<NtosWindow.Content scrollable>
|
||||
<Section
|
||||
title="Operations Management"
|
||||
@@ -142,12 +142,7 @@ export const CargoControl = (props) => {
|
||||
</>
|
||||
}
|
||||
>
|
||||
<Box
|
||||
mb={2}
|
||||
p={1}
|
||||
backgroundColor="rgba(255,255,255,0.05)"
|
||||
textColor="yellow"
|
||||
>
|
||||
<Box className="OrionNotice" mb={2} p={1}>
|
||||
{data.status_message}
|
||||
</Box>
|
||||
<Tabs>
|
||||
@@ -203,7 +198,16 @@ export const CargoControl = (props) => {
|
||||
{showAppropriateWindow(data.page)}
|
||||
</Section>
|
||||
{data.order_details && (
|
||||
<Section title="Order Details">
|
||||
<Section
|
||||
title="Order Details"
|
||||
buttons={
|
||||
<Button
|
||||
content="Clear Selected Order"
|
||||
icon="times"
|
||||
onClick={() => act('clear_order')}
|
||||
/>
|
||||
}
|
||||
>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="ID">
|
||||
{data.order_details.order_id}
|
||||
@@ -359,16 +363,17 @@ export const OverviewSubmitted = (props) => {
|
||||
<Table.Cell>
|
||||
<Button
|
||||
content="Approve"
|
||||
color="green"
|
||||
color="approve"
|
||||
onClick={() =>
|
||||
act('order_approve', {
|
||||
order_approve: order.order_id.toString(),
|
||||
})
|
||||
}
|
||||
/>
|
||||
|
||||
<Button
|
||||
content="Reject"
|
||||
color="red"
|
||||
color="reject"
|
||||
onClick={() =>
|
||||
act('order_reject', {
|
||||
order_reject: order.order_id.toString(),
|
||||
@@ -432,7 +437,7 @@ export const OverviewApproved = (props) => {
|
||||
<Table.Cell>
|
||||
<Button
|
||||
content="Reject"
|
||||
color="red"
|
||||
color="reject"
|
||||
onClick={() =>
|
||||
act('order_reject', {
|
||||
order_reject: order.order_id.toString(),
|
||||
|
||||
@@ -58,42 +58,48 @@ type Item = {
|
||||
supplier_name: string;
|
||||
};
|
||||
|
||||
const hasValidOrder = (order?: Order | null) => !!order?.order_id;
|
||||
|
||||
export const CargoDelivery = (props) => {
|
||||
const { act, data } = useBackend<CargoData>();
|
||||
|
||||
return (
|
||||
<NtosWindow resizable>
|
||||
<NtosWindow resizable theme="orion" width={620} height={800}>
|
||||
<NtosWindow.Content scrollable>
|
||||
<Section>
|
||||
<Tabs>
|
||||
<Tabs.Tab onClick={() => act('page', { page: 'overview_main' })}>
|
||||
Main
|
||||
</Tabs.Tab>
|
||||
{data.order_details && (
|
||||
<>
|
||||
{' '}
|
||||
<Tabs.Tab
|
||||
onClick={() =>
|
||||
act('page', {
|
||||
page: 'order_overview',
|
||||
order_overview: data.order_details?.order_id?.toString(),
|
||||
})
|
||||
}
|
||||
>
|
||||
Overview
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
onClick={() =>
|
||||
act('page', {
|
||||
page: 'order_payment',
|
||||
order_payment: data.order_details?.order_id?.toString(),
|
||||
})
|
||||
}
|
||||
>
|
||||
Payment
|
||||
</Tabs.Tab>
|
||||
</>
|
||||
)}
|
||||
|
||||
<Tabs.Tab
|
||||
onClick={() =>
|
||||
act('page', {
|
||||
page: 'order_overview',
|
||||
order_overview: data.order_details?.order_id?.toString(),
|
||||
})
|
||||
}
|
||||
>
|
||||
Overview
|
||||
</Tabs.Tab>
|
||||
|
||||
<Tabs.Tab
|
||||
onClick={() =>
|
||||
act('page', {
|
||||
page: 'order_payment',
|
||||
order_payment: data.order_details?.order_id?.toString(),
|
||||
})
|
||||
}
|
||||
>
|
||||
Payment
|
||||
</Tabs.Tab>
|
||||
<Button
|
||||
content="Clear Selected Order"
|
||||
icon="times"
|
||||
disabled={!data.order_details?.order_id}
|
||||
onClick={() => act('clear_order')}
|
||||
style={{ marginLeft: 'auto' }}
|
||||
/>
|
||||
</Tabs>
|
||||
</Section>
|
||||
{data.page === 'overview_main' ? (
|
||||
@@ -146,6 +152,14 @@ export const MainView = (props) => {
|
||||
export const Overview = (props) => {
|
||||
const { act, data } = useBackend<CargoData>();
|
||||
|
||||
if (!hasValidOrder(data.order_details)) {
|
||||
return (
|
||||
<Section title="Overview">
|
||||
No order selected. Please select an order from the main list first.
|
||||
</Section>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Section title="Overview">
|
||||
<LabeledList>
|
||||
@@ -223,6 +237,14 @@ export const Overview = (props) => {
|
||||
export const Payment = (props) => {
|
||||
const { act, data } = useBackend<CargoData>();
|
||||
|
||||
if (!hasValidOrder(data.order_details)) {
|
||||
return (
|
||||
<Section title="Payment">
|
||||
No order selected. Please select an order from the main list first.
|
||||
</Section>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Section
|
||||
title={`Payment: Order No. ${data.order_details.order_id}`}
|
||||
@@ -230,29 +252,36 @@ export const Payment = (props) => {
|
||||
<>
|
||||
<Button
|
||||
content="Account"
|
||||
color="good"
|
||||
color="caution"
|
||||
onClick={() => act('accountselect')}
|
||||
/>
|
||||
<Button
|
||||
content={
|
||||
data.order_details.status === 'shipped'
|
||||
? 'Confirm Delivery'
|
||||
: data.order_details.status === 'delivered'
|
||||
? 'Delivered Already'
|
||||
: 'Not Shipped'
|
||||
}
|
||||
disabled={data.order_details.status !== 'shipped'}
|
||||
icon="check"
|
||||
color="green"
|
||||
color="approve"
|
||||
onClick={() => act('deliver', { deliver: 'true' })}
|
||||
/>
|
||||
>
|
||||
{data.order_details.status === 'shipped'
|
||||
? 'Deliver'
|
||||
: data.order_details.status === 'delivered'
|
||||
? 'Delivered'
|
||||
: 'Not Shipped'}
|
||||
</Button>
|
||||
<Button
|
||||
content="Pay"
|
||||
disabled={!data.order_details.needs_payment}
|
||||
icon="credit-card"
|
||||
color="green"
|
||||
color="approve"
|
||||
onClick={() => act('pay', { deliver: 'true' })}
|
||||
/>
|
||||
<Button
|
||||
content="Print"
|
||||
onClick={() =>
|
||||
act('order_print', {
|
||||
order_print: data.order_details.order_id.toString(),
|
||||
})
|
||||
}
|
||||
/>
|
||||
</>
|
||||
}
|
||||
>
|
||||
|
||||
@@ -95,7 +95,7 @@ export const CargoOrder = (props) => {
|
||||
const { act, data } = useBackend<CargoData>();
|
||||
|
||||
return (
|
||||
<NtosWindow resizable width={800} height={800}>
|
||||
<NtosWindow resizable width={800} height={800} theme="orion">
|
||||
<NtosWindow.Content scrollable>
|
||||
<Tabs fluid>
|
||||
<Tabs.Tab
|
||||
@@ -152,12 +152,13 @@ export const MainPage = (props) => {
|
||||
/>
|
||||
<Button
|
||||
content="Clear"
|
||||
color="red"
|
||||
color="reject"
|
||||
icon="stop"
|
||||
onClick={() => act('clear_order')}
|
||||
/>
|
||||
<Button
|
||||
content="Submit Order"
|
||||
color="approve"
|
||||
icon="check"
|
||||
onClick={() => act('submit_order')}
|
||||
/>
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
.theme-orion:root {
|
||||
// Base
|
||||
--color-base: hsl(24, 100%, 5%);
|
||||
--color-primary: hsl(from var(--color-base) h s calc(l - 30));
|
||||
--color-label: #d86c00;
|
||||
--secondary-saturation: 10;
|
||||
--secondary-lightness-adjustment: -56;
|
||||
--base-gradient-spread: 0;
|
||||
--border-radius-unit: 0;
|
||||
--base-font-stack:
|
||||
ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
|
||||
'DejaVu Sans Mono', monospace;
|
||||
|
||||
// Components
|
||||
--button-color: var(--color-label);
|
||||
--button-background-default: var(--color-base);
|
||||
--button-background-selected: hsl(0, 90%, 35%);
|
||||
--button-background-caution: hsl(30, 85%, 40%);
|
||||
--button-background-danger: hsl(31, 100%, 30%);
|
||||
--progress-bar-background: hsl(0, 0%, 0%, 0.5);
|
||||
--input-background: transparent;
|
||||
--button-background-approve_button: hsl(38, 90%, 24%);
|
||||
--button-background-danger_button: hsl(8, 80%, 26%);
|
||||
--button-background-caution: hsl(28, 85%, 32%);
|
||||
|
||||
--button-border-approve: hsl(45, 100%, 55%);
|
||||
--button-border-reject: hsl(8, 100%, 55%);
|
||||
|
||||
// Background
|
||||
body,
|
||||
:root {
|
||||
background-color: var(--color-base);
|
||||
}
|
||||
|
||||
.Window {
|
||||
background-color: var(--color-base);
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.Button {
|
||||
font-family: var(--base-font-stack);
|
||||
border: var(--border-thickness-small) outset var(--color-base);
|
||||
outline: var(--border-thickness-tiny) solid hsl(60, 6%, 8%);
|
||||
|
||||
&-disabled {
|
||||
color: hsl(60, 6%, 77%);
|
||||
font-family: var(--base-font-stack);
|
||||
|
||||
&:hover {
|
||||
color: hsl(0, 0%, 100%);
|
||||
}
|
||||
}
|
||||
|
||||
&--selected {
|
||||
color: var(--color-white);
|
||||
border-style: inset;
|
||||
}
|
||||
|
||||
&--color--approve,
|
||||
&--color--success {
|
||||
background-color: var(--button-background-approve_button);
|
||||
border-color: var(--button-border-approve);
|
||||
color: hsl(45, 100%, 75%);
|
||||
|
||||
&:hover:not(.Button--disabled) {
|
||||
background-color: hsl(38, 90%, 30%);
|
||||
color: hsl(45, 100%, 88%);
|
||||
border-color: hsl(45, 100%, 68%);
|
||||
}
|
||||
}
|
||||
|
||||
&--color--danger,
|
||||
&--color--reject {
|
||||
background-color: var(--button-background-danger_button);
|
||||
border-color: var(--button-border-reject);
|
||||
color: hsl(12, 100%, 78%);
|
||||
font-weight: bold;
|
||||
|
||||
&:hover:not(.Button--disabled) {
|
||||
background-color: hsl(31, 100%, 36%);
|
||||
color: hsl(12, 100%, 90%);
|
||||
border-color: hsl(8, 100%, 68%);
|
||||
}
|
||||
}
|
||||
|
||||
&--caution {
|
||||
background-color: var(--button-background-caution);
|
||||
color: hsl(32, 100%, 75%);
|
||||
|
||||
&::before {
|
||||
content: '! ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Section {
|
||||
font-family: var(--base-font-stack);
|
||||
|
||||
background-color: hsla(24, 100%, 4%, 0.82);
|
||||
border: var(--border-thickness-small) solid hsl(31, 80%, 18%);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px hsla(31, 100%, 45%, 0.12),
|
||||
0 0 8px hsla(24, 100%, 2%, 0.8);
|
||||
|
||||
&__title {
|
||||
border-bottom: 1px solid hsl(31, 80%, 18%);
|
||||
}
|
||||
|
||||
&__titleText {
|
||||
color: var(--color-label);
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
.Table {
|
||||
background-color: hsla(24, 100%, 3%, 0.45);
|
||||
border: 1px solid hsla(31, 100%, 35%, 0.22);
|
||||
border-collapse: separate;
|
||||
border-spacing: 0;
|
||||
box-shadow: inset 0 0 0 1px hsla(31, 100%, 50%, 0.06);
|
||||
|
||||
&__row {
|
||||
background-color: hsla(24, 100%, 5%, 0.42);
|
||||
|
||||
&:nth-child(even):not(&--header) {
|
||||
background-color: hsla(31, 70%, 8%, 0.34);
|
||||
}
|
||||
|
||||
&:hover:not(&--header) {
|
||||
background-color: hsla(31, 100%, 18%, 0.45);
|
||||
}
|
||||
|
||||
&--header {
|
||||
background-color: hsla(31, 100%, 14%, 0.65);
|
||||
color: hsl(31, 100%, 72%);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.035em;
|
||||
box-shadow: inset 0 -1px 0 hsla(31, 100%, 50%, 0.28);
|
||||
}
|
||||
}
|
||||
|
||||
&__cell {
|
||||
border-bottom: 1px solid hsla(31, 100%, 32%, 0.18);
|
||||
border-right: 1px solid hsla(31, 100%, 24%, 0.1);
|
||||
padding-left: 10px;
|
||||
padding-top: 0.35rem;
|
||||
padding-bottom: 0.35rem;
|
||||
|
||||
&:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Tabs {
|
||||
border-bottom: 1px solid hsl(31, 80%, 18%);
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
&__tab {
|
||||
background-color: hsla(24, 100%, 3%, 0.7);
|
||||
border: 1px solid hsl(31, 70%, 14%);
|
||||
color: hsl(31, 80%, 55%);
|
||||
|
||||
&:hover {
|
||||
background-color: hsla(31, 100%, 28%, 0.18);
|
||||
color: hsl(31, 100%, 72%);
|
||||
}
|
||||
|
||||
&--selected {
|
||||
background-color: hsl(31, 100%, 18%);
|
||||
border-color: hsl(31, 100%, 42%);
|
||||
color: hsl(45, 100%, 75%);
|
||||
box-shadow: inset 0 -2px 0 hsl(45, 100%, 55%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.OrionNotice {
|
||||
background-color: hsla(45, 100%, 45%, 0.08);
|
||||
border-left: 3px solid hsl(45, 100%, 55%);
|
||||
color: hsl(45, 100%, 75%);
|
||||
text-shadow: 0 0 4px hsla(45, 100%, 50%, 0.25);
|
||||
}
|
||||
|
||||
.Layout__content {
|
||||
background-image: url('../../assets/bg-orion.svg');
|
||||
}
|
||||
|
||||
div,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
font-family: var(--base-font-stack);
|
||||
color: var(--color-label);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 250%;
|
||||
padding: 32px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user