package Ġsuper market . model Ċ Ċ import Ġsuper market . model . offer . Offer Ċ Ċ class ĠShop ping Cart Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitems Ġ= Ġmutable ListOf < Product Quantity >() ĊĊĠĠĠ Ġinternal Ġfun Ġget Items (): ĠList < Product Quantity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun ĠaddTo Cart ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . addTo Cart ( product , Ġ 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo Cart ( product : ĠProduct , Ġquantity : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( Product Quantity ( product , Ġquantity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġhandle Offers ( receipt : ĠRe ceipt , Ġoffers : ĠMap < Product , ĠOffer >, Ġcatalog : ĠSuper market Catalog ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Quantity Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offers . containsKey ( product Quantity . product )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffer Ġ= Ġoffers [ product Quantity . product ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiscount Ġ= Ġoffer . calculate Discount ( product Quantity , Ġcatalog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( discount Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceipt . add Discount ( discount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ