package Ġcom . core x . erp . so Ċ Ċ import Ġapp . dok t . Root Ċ import Ġcom . core x . erp . shared . V at No Ċ import Ġkotlinx . serialization . Serializable Ċ Ċ //# region ĠExceptions Ċ data Ġclass ĠCustomer Is B anned ( val Ġcustomer : ĠV at No ) Ġ: ĠIllegalArgumentException () Ċ Ċ class ĠQu ot ation Not Accepted Ġ: ĠIllegalArgumentException () Ċ //# endregion Ċ Ċ interface ĠSales B ans Ġ: ĠCollection < V at No > Ċ Ċ interface ĠEvents Ġ{ ĊĠĠĠ Ġfun Ġcustomer Changed ( customer : ĠV at No ) ĊĊĠĠĠ Ġfun Ġdelivered () ĊĊĠĠĠ Ġfun Ġsales Order Confirmed () ĊĊĠĠĠ Ġfun Ġquot ation Created ( customer : ĠV at No ) Ċ } Ċ Ċ @ Serializable Ċ class ĠSales Order Ġ: ĠRoot < Events >(), ĠEvents Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsales B ans : ĠSales B ans ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcustomer : ĠV at No ? Ġ= Ġnull ĊĠĠĠ Ġ// late init Ġvar Ġcustomer : ĠV at No ĊĊĠĠĠ Ġvar Ġdelivered Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġquot ation Accepted Ġ= Ġfalse ĊĊĠĠĠ Ġ// # region ĠCommand Ġhandlers ĊĠĠĠ Ġfun Ġaccept Quot ation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! quotation Accepted ) Ġemit . sales Order Confirmed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest For Quot ation ( customer : ĠV at No ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( customer Ġin Ġsales B ans ) Ġthrow ĠCustomer Is B anned ( customer ) ĊĠĠĠĠĠĠĠ Ġemit . quotation Created ( customer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Customer ( customer : ĠV at No ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( customer Ġ== Ġthis . customer ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( customer Ġin Ġsales B ans ) Ġthrow ĠCustomer Is B anned ( customer ) ĊĠĠĠĠĠĠĠ Ġemit . customer Changed ( customer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeliver () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( quotation Accepted ) Ġemit . deliver ed () ĊĠĠĠĠĠĠĠ Ġelse Ġthrow ĠQu ot ation Not Accepted () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// # endregion ĊĊĠĠĠ Ġ// # region ĠEvent Ġhandlers ĊĠĠĠ Ġoverride Ġfun Ġcustomer Changed ( customer : ĠV at No ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . customer Ġ= Ġcustomer ĊĠĠĠĠĠĠĠ Ġquot ation Accepted Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelivered () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelivered Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsales Order Confirmed () Ġ{ ĊĠĠĠĠĠĠĠ Ġquot ation Accepted Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquot ation Created ( customer : ĠV at No ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . customer Ġ= Ġcustomer ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// # endregion Ċ } Ċ