From 27e0b4d6049ba0a7193c7e4de3920cc4f8653f48 Mon Sep 17 00:00:00 2001 From: Bop Date: Mon, 25 Sep 2023 02:02:46 +0700 Subject: [PATCH 1/6] nod --- code/modules/cargo/console.dm | 6 ++- code/modules/cargo/order.dm | 6 ++- .../mob/living/carbon/human/human_helpers.dm | 3 ++ .../programs/supply/budgetordering.dm | 52 +++++++++++++------ tgui/packages/tgui/interfaces/Cargo.js | 14 +++-- 5 files changed, 60 insertions(+), 21 deletions(-) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index d6b16d59b671..a55fd9d6da86 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -90,7 +90,8 @@ "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 + "budget" = SO.budget )) data["requests"] = list() @@ -100,7 +101,8 @@ "cost" = SO.pack.get_cost(), "orderer" = SO.orderer, "reason" = SO.reason, - "id" = SO.id + "id" = SO.id, + "budget" = SO.budget )) return data diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 330295e2a226..6afc883649fe 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -27,10 +27,11 @@ var/orderer_rank var/orderer_ckey var/reason + var/budget var/datum/supply_pack/pack var/datum/bank_account/paying_account -/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason, paying_account) +/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason, paying_account, budget) id = SSshuttle.ordernum++ src.pack = pack src.orderer = orderer @@ -38,6 +39,7 @@ src.orderer_ckey = orderer_ckey src.reason = reason src.paying_account = paying_account + src.budget = budget /datum/supply_order/proc/generateRequisition(turf/T) var/obj/item/paper/P = new(T) @@ -51,6 +53,7 @@ P.info += "Requested by: [orderer]
" if(paying_account) P.info += "Paid by: [paying_account.account_holder]
" + P.info += "Crate Type: [budget? "[paying_account.account_holder] Crate":"Normal Crate"]
" P.info += "Rank: [orderer_rank]
" P.info += "Comment: [reason]
" @@ -70,6 +73,7 @@ P.name += " - Purchased by [owner]" P.info += "Order[packname?"":"s"]: [id]
" P.info += "Destination: [station_name]
" + P.info += "Crate Type: [budget? "[paying_account.account_holder] Crate":"Normal Crate"]
" if(packname) P.info += "Item: [packname]
" P.info += "Contents:
" diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 93e9ae7a790a..1c516c42cc5c 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -30,8 +30,11 @@ if(id) return id.registered_name var/obj/item/pda/pda = wear_id + var/obj/item/modular_computer/tablet/tablet = wear_id if(istype(pda)) return pda.owner + if(istype(tablet)) + return tablet.name return if_no_id //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere diff --git a/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm b/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm index d5bfdd0156c0..8b964ed1b62e 100644 --- a/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm @@ -27,6 +27,12 @@ var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible." /// Can send the shuttle **AWAY** from the station var/can_send = FALSE + ///Is it being bought from a departmental budget? + var/budget_order = FALSE + ///If this is true, unlock the ability to order through budgets + var/unlock_budget = TRUE + ///account for everything + var/datum/bank_account/account /datum/computer_file/program/budgetorders/proc/get_export_categories() . = EXPORT_CARGO @@ -67,24 +73,28 @@ . = ..() var/list/data = get_header_data() data["location"] = SSshuttle.supply.getStatusText() - var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR) + account = SSeconomy.get_dep_account(ACCOUNT_CAR) var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] var/obj/item/card/id/id_card = card_slot?.GetID() if(id_card?.registered_account) + if(id_card?.registered_account?.account_job?.paycheck_department == ACCOUNT_CAR) + unlock_budget = FALSE //cargo tech is already using the same budget. + if(id_card?.registered_account?.account_job?.paycheck_department && budget_order) + account = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department) if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access) || (ACCESS_CARGO in id_card.access)) requestonly = FALSE - if(id_card?.registered_account?.account_job?.paycheck_department) - buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department) can_approve_requests = TRUE can_send = TRUE else requestonly = TRUE can_approve_requests = FALSE can_send = FALSE + unlock_budget = TRUE else requestonly = TRUE - if(buyer) - data["points"] = buyer.account_balance + unlock_budget = FALSE //none registered account shouldnt be using budget order + if(account) + data["points"] = account.account_balance //Otherwise static data, that is being applied in ui_data as the crates visible and buyable are not static, and are determined by inserted ID. data["requestonly"] = requestonly @@ -109,9 +119,10 @@ )) //Data regarding the User's capability to buy things. - data["has_id"] = id_card data["away"] = SSshuttle.supply.getDockedId() == "supply_away" data["self_paid"] = self_paid + data["unlock_budget"] = unlock_budget + data["budget_order"] = budget_order data["docked"] = SSshuttle.supply.mode == SHUTTLE_IDLE data["loan"] = !!SSshuttle.shuttle_loan data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched @@ -131,7 +142,8 @@ "cost" = SO.pack.cost, "id" = SO.id, "orderer" = SO.orderer, - "paid" = !isnull(SO.paying_account) //paid by requester + "paid" = !isnull(SO.paying_account), //paid by requester + "budget" = SO.budget )) data["requests"] = list() @@ -141,7 +153,8 @@ "cost" = SO.pack.cost, "orderer" = SO.orderer, "reason" = SO.reason, - "id" = SO.id + "id" = SO.id, + "budget" = SO.budget )) return data @@ -197,13 +210,14 @@ var/ckey = usr.ckey if(ishuman(usr)) var/mob/living/carbon/human/H = usr - name = H.get_authentification_name() + if(budget_order) + name = account.account_holder + else + name = H.get_authentification_name() rank = H.get_assignment(hand_first = TRUE) else if(issilicon(usr)) name = usr.real_name rank = "Silicon" - - var/datum/bank_account/account if(self_paid && ishuman(usr)) var/mob/living/carbon/human/H = usr var/obj/item/card/id/id_card = H.get_idcard(TRUE) @@ -226,16 +240,17 @@ if(!self_paid && ishuman(usr) && !account) var/obj/item/card/id/id_card = card_slot?.GetID() - account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department) + if(budget_order) + account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department) - var/turf/T = get_turf(src) - var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account) + var/turf/T = get_turf(computer) + var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account, account.account_holder) SO.generateRequisition(T) if((requestonly && !self_paid) || !(card_slot?.GetID())) SSshuttle.requestlist += SO else SSshuttle.shoppinglist += SO - if(self_paid) + if(self_paid || budget_order) computer.say("Order processed. The price will be charged to [account.account_holder]'s bank account on delivery.") . = TRUE if("remove") @@ -271,6 +286,13 @@ . = TRUE if("toggleprivate") self_paid = !self_paid + if(budget_order) + budget_order = FALSE //incase something fucked + . = TRUE + if("togglebudget") + budget_order = !budget_order + if(self_paid) + self_paid = FALSE //incase something fucked . = TRUE if(.) post_signal("supply") diff --git a/tgui/packages/tgui/interfaces/Cargo.js b/tgui/packages/tgui/interfaces/Cargo.js index 205c3a50cd54..d5c09fcce5aa 100644 --- a/tgui/packages/tgui/interfaces/Cargo.js +++ b/tgui/packages/tgui/interfaces/Cargo.js @@ -128,7 +128,7 @@ export const CargoCatalog = (props, context) => { const { express } = props; const { act, data } = useBackend(context); - const { self_paid, app_cost } = data; + const { self_paid, app_cost, budget_order, unlock_budget } = data; const supplies = Object.values(data.supplies); const [ @@ -144,11 +144,16 @@ export const CargoCatalog = (props, context) => { buttons={!express && ( <> - act('toggleprivate')} /> + onClick={() => act('toggleprivate')} />} + {!self_paid && !!unlock_budget && act('togglebudget')} />} )}> @@ -347,6 +352,9 @@ const CargoCart = (props, context) => { {entry.object} + {!!entry.budget && ( + [{entry.budget}] + )} {!!entry.paid && ( [Paid Privately] )} From 480d660eda26066adb81b33126a240036a4ea840 Mon Sep 17 00:00:00 2001 From: Bop Date: Mon, 25 Sep 2023 02:38:29 +0700 Subject: [PATCH 2/6] mhm --- .../file_system/programs/supply/budgetordering.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm b/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm index 8b964ed1b62e..28bffb560811 100644 --- a/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/supply/budgetordering.dm @@ -77,6 +77,7 @@ var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] var/obj/item/card/id/id_card = card_slot?.GetID() if(id_card?.registered_account) + unlock_budget = TRUE if(id_card?.registered_account?.account_job?.paycheck_department == ACCOUNT_CAR) unlock_budget = FALSE //cargo tech is already using the same budget. if(id_card?.registered_account?.account_job?.paycheck_department && budget_order) @@ -89,7 +90,6 @@ requestonly = TRUE can_approve_requests = FALSE can_send = FALSE - unlock_budget = TRUE else requestonly = TRUE unlock_budget = FALSE //none registered account shouldnt be using budget order @@ -267,9 +267,6 @@ var/id = text2num(params["id"]) for(var/datum/supply_order/SO in SSshuttle.requestlist) if(SO.id == id) - var/obj/item/card/id/id_card = card_slot?.GetID() - if(id_card && id_card?.registered_account) - SO.paying_account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department) SSshuttle.requestlist -= SO SSshuttle.shoppinglist += SO . = TRUE From 17c7599e5b309888b5743b8410d39566797f8b84 Mon Sep 17 00:00:00 2001 From: Bop Date: Mon, 25 Sep 2023 04:45:29 +0700 Subject: [PATCH 3/6] doomed --- code/modules/shuttle/supply.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 5e03cf8bf67e..f7c805433c6b 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -26,7 +26,6 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/structure/extraction_point, /obj/machinery/syndicatebomb, /obj/item/hilbertshotel, - /obj/structure/closet/crate/secure/owned, /obj/structure/closet/bluespace // yogs - nope nice try ))) @@ -61,7 +60,8 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( for(var/trf in shuttle_area) var/turf/T = trf for(var/a in T.get_all_contents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) + var/obj/structure/closet/crate/secure/owned/crate = a + if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) || crate.locked) return FALSE return TRUE From dbf165074189392bb934d3837dc9a16f337d5ace Mon Sep 17 00:00:00 2001 From: Bop Date: Mon, 25 Sep 2023 04:59:47 +0700 Subject: [PATCH 4/6] woooop --- code/modules/shuttle/supply.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index f7c805433c6b..e16d59289d7c 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -60,7 +60,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( for(var/trf in shuttle_area) var/turf/T = trf for(var/a in T.get_all_contents()) - var/obj/structure/closet/crate/secure/owned/crate = a + var/obj/structure/closet/crate/secure/owned/crate = locate() in a if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) || crate.locked) return FALSE return TRUE From 3c32201dda41a7de6ef565d211c17286241b0f91 Mon Sep 17 00:00:00 2001 From: Bop Date: Mon, 25 Sep 2023 05:22:15 +0700 Subject: [PATCH 5/6] should --- code/modules/shuttle/supply.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index e16d59289d7c..f4c18df95eb9 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -60,8 +60,10 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( for(var/trf in shuttle_area) var/turf/T = trf for(var/a in T.get_all_contents()) - var/obj/structure/closet/crate/secure/owned/crate = locate() in a - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) || crate.locked) + for(var/obj/structure/closet/crate/secure/owned/crate in a) + if(crate.locked) + return FALSE + if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) return FALSE return TRUE From 50f81c1f40e95a880d917eb964ee027491692a0a Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 27 Sep 2023 02:22:10 +0700 Subject: [PATCH 6/6] Update Cargo.js --- tgui/packages/tgui/interfaces/Cargo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/Cargo.js b/tgui/packages/tgui/interfaces/Cargo.js index d5c09fcce5aa..c8999e2c2eb2 100644 --- a/tgui/packages/tgui/interfaces/Cargo.js +++ b/tgui/packages/tgui/interfaces/Cargo.js @@ -151,7 +151,7 @@ export const CargoCatalog = (props, context) => { onClick={() => act('toggleprivate')} />} {!self_paid && !!unlock_budget && act('togglebudget')} />}