diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm index cc76a893555..5cceac263fa 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/order_console/mining - name = "mining equipment vendor" + name = "mining equipment order console" desc = "An equipment shop for miners, points collected at an ore redemption machine can be spent here." icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "mining" @@ -34,17 +34,24 @@ for(var/datum/orderable_item/item as anything in groceries) things_to_order[item.item_path] = groceries[item] - var/datum/supply_pack/custom/mining_pack = new(purchaser, things_to_order) + var/datum/supply_pack/custom/mining_pack = new( + purchaser = purchaser, \ + cost = get_total_cost(), \ + contains = things_to_order, + ) var/datum/supply_order/new_order = new( - pack = mining_pack, \ - orderer = purchaser, \ - orderer_rank = "Mining Vendor", \ - orderer_ckey = purchaser.ckey, \ - reason = "", \ - paying_account = card.registered_account, \ - department_destination = null, \ - coupon = null, \ + pack = mining_pack, + orderer = purchaser, + orderer_rank = "Mining Vendor", + orderer_ckey = purchaser.ckey, + reason = "", + paying_account = card.registered_account, + department_destination = null, + coupon = null, charge_on_purchase = FALSE, + manifest_can_fail = FALSE, + cost_type = "mp", + can_be_cancelled = FALSE, ) if(ltsrbt_delivered) var/obj/machinery/mining_ltsrbt/ltsrbt diff --git a/code/game/machinery/computer/orders/order_computer/order_computer.dm b/code/game/machinery/computer/orders/order_computer/order_computer.dm index 461a27fa162..f0933f0694a 100644 --- a/code/game/machinery/computer/orders/order_computer/order_computer.dm +++ b/code/game/machinery/computer/orders/order_computer/order_computer.dm @@ -102,6 +102,10 @@ GLOBAL_LIST_EMPTY(order_console_products) return var/mob/living/living_user = usr switch(action) + if("add_one") + var/datum/orderable_item/wanted_item = locate(params["target"]) in GLOB.order_console_products + grocery_list[wanted_item] += 1 + update_static_data(living_user) if("cart_set") //this is null if the action doesn't need it (purchase, quickpurchase) var/datum/orderable_item/wanted_item = locate(params["target"]) in GLOB.order_console_products diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index d610559ef01..3f680f883c3 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -14,10 +14,12 @@ var/order_id = 0 var/errors = 0 -/obj/item/paper/fluff/jobs/cargo/manifest/Initialize(mapload, id, cost) +/obj/item/paper/fluff/jobs/cargo/manifest/Initialize(mapload, id, cost, manifest_can_fail = TRUE) . = ..() order_id = id order_cost = cost + if(!manifest_can_fail) + return if(prob(MANIFEST_ERROR_CHANCE)) errors |= MANIFEST_ERROR_NAME @@ -37,6 +39,7 @@ /datum/supply_order var/id + var/cost_type var/orderer var/orderer_rank var/orderer_ckey @@ -49,6 +52,10 @@ var/datum/supply_pack/pack var/datum/bank_account/paying_account var/obj/item/coupon/applied_coupon + ///Boolean on whether the manifest can fail or not. + var/manifest_can_fail = TRUE + ///Boolean on whether the manifest can be cancelled through cargo consoles. + var/can_be_cancelled = TRUE /datum/supply_order/New( datum/supply_pack/pack, @@ -59,9 +66,13 @@ paying_account, department_destination, coupon, - charge_on_purchase, + charge_on_purchase = TRUE, + manifest_can_fail = TRUE, + cost_type = "cr", + can_be_cancelled = TRUE, ) id = SSshuttle.order_number++ + src.cost_type = cost_type src.pack = pack src.orderer = orderer src.orderer_rank = orderer_rank @@ -71,6 +82,17 @@ src.department_destination = department_destination src.applied_coupon = coupon src.charge_on_purchase = charge_on_purchase + src.manifest_can_fail = manifest_can_fail + src.can_be_cancelled = can_be_cancelled + +//returns the total cost of this order. Its not the total price paid by cargo but the total value of this order +/datum/supply_order/proc/get_final_cost() + var/cost = pack.get_cost() + if(applied_coupon) //apply discount price + cost -= (cost * applied_coupon.discount_pct_off) + if(!isnull(paying_account)) //privately purchased means 1.1x the cost + cost *= 1.1 + return cost /datum/supply_order/proc/generateRequisition(turf/T) var/obj/item/paper/requisition_paper = new(T) @@ -93,7 +115,7 @@ return requisition_paper /datum/supply_order/proc/generateManifest(obj/container, owner, packname, cost) //generates-the-manifests. - var/obj/item/paper/fluff/jobs/cargo/manifest/manifest_paper = new(null, id, cost) + var/obj/item/paper/fluff/jobs/cargo/manifest/manifest_paper = new(null, id, cost, manifest_can_fail) var/station_name = (manifest_paper.errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name() diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index 3ad021d4dc1..4aee52b80e4 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -120,12 +120,14 @@ data["cart"] = list() for(var/datum/supply_order/SO in SSshuttle.shopping_list) data["cart"] += list(list( + "cost_type" = SO.cost_type, "object" = SO.pack.name, "cost" = SO.pack.get_cost(), "id" = SO.id, "orderer" = SO.orderer, "paid" = !isnull(SO.paying_account), //paid by requester - "dep_order" = SO.department_destination ? TRUE : FALSE + "dep_order" = !!SO.department_destination, + "can_be_cancelled" = SO.can_be_cancelled, )) data["requests"] = list() @@ -298,8 +300,8 @@ break if("clear") for(var/datum/supply_order/cancelled_order in SSshuttle.shopping_list) - if(cancelled_order.department_destination) - continue //don't cancel other department's orders + if(cancelled_order.department_destination || cancelled_order.can_be_cancelled) + continue //don't cancel other department's orders or orders that can't be cancelled SSshuttle.shopping_list -= cancelled_order . = TRUE if("approve") diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm index 3f8259fb7db..479d2595c02 100644 --- a/code/modules/cargo/packs/_packs.dm +++ b/code/modules/cargo/packs/_packs.dm @@ -90,7 +90,8 @@ crate_name = "shaft mining delivery crate" access = list(ACCESS_MINING) -/datum/supply_pack/custom/New(purchaser, list/given_contents) +/datum/supply_pack/custom/New(purchaser, cost, list/contains) . = ..() name = "[purchaser]'s Mining Order" - contains = given_contents + src.cost = cost + src.contains = contains diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 9a78e0bb482..a3ba91cd3b4 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -125,11 +125,14 @@ data["cart"] = list() for(var/datum/supply_order/SO in SSshuttle.shopping_list) data["cart"] += list(list( + "cost_type" = SO.cost_type, "object" = SO.pack.name, "cost" = SO.pack.get_cost(), "id" = SO.id, "orderer" = SO.orderer, - "paid" = !isnull(SO.paying_account) //paid by requester + "paid" = !isnull(SO.paying_account), //paid by requester + "dep_order" = !!SO.department_destination, + "can_be_cancelled" = SO.can_be_cancelled, )) data["requests"] = list() @@ -251,7 +254,10 @@ . = TRUE break if("clear") - SSshuttle.shopping_list.Cut() + for(var/datum/supply_order/cancelled_order in SSshuttle.shopping_list) + if(cancelled_order.department_destination || cancelled_order.can_be_cancelled) + continue //don't cancel other department's orders or orders that can't be cancelled + SSshuttle.shopping_list -= cancelled_order . = TRUE if("approve") var/id = text2num(params["id"]) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 5221b81f015..0708abf21c3 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -155,9 +155,10 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( paying_for_this = spawning_order.paying_account if(spawning_order.pack.goody) LAZYADD(goodies_by_buyer[spawning_order.paying_account], spawning_order) - if(istype(spawning_order, /datum/supply_order/company_import)) - LAZYADD(forced_briefcases[spawning_order.paying_account], spawning_order) - paying_for_this.bank_card_talk("Cargo order #[spawning_order.id] has shipped. [price] credits have been charged to your bank account.") + var/reciever_message = "Cargo order #[spawning_order.id] has shipped." + if(spawning_order.charge_on_purchase) + reciever_message += " [price] credits have been charged to your bank account" + paying_for_this.bank_card_talk(reciever_message) SSeconomy.track_purchase(paying_for_this, price, spawning_order.pack.name) var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo.adjust_money(price - spawning_order.pack.get_cost()) //Cargo gets the handling fee @@ -202,7 +203,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( for (var/item in our_order.pack.contains) misc_contents[buyer] += item misc_costs[buyer] += our_order.pack.cost - misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " + misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " //SKYRAT EDIT START for(var/briefcase_order in forced_briefcases) var/list/buying_account_orders = forced_briefcases[briefcase_order] diff --git a/tgui/packages/tgui/interfaces/Cargo.js b/tgui/packages/tgui/interfaces/Cargo.js index 4760032a0f5..9f306946a47 100644 --- a/tgui/packages/tgui/interfaces/Cargo.js +++ b/tgui/packages/tgui/interfaces/Cargo.js @@ -407,15 +407,15 @@ const CargoCart = (props, context) => { {(entry.dep_order && (