Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package eu.cosmedico.cloud.domain.manufacturer
- import eu.cosmedico.cloud.domain.ItemCode
- import eu.cosmedico.cloud.domain.billing.{BasicInvoiceItem, InvoiceItem}
- /**
- * Created by g.duszynski@cos-medico.eu on 2015-04-16.
- * All rights belong to CM International Ltd.
- */
- trait ProfitShare {
- def name: String
- def itemCode: ItemCode
- def taxRate: Option[BigDecimal]
- def shareOf(item: InvoiceItem): Option[InvoiceItem]
- }
- case class NoShare(name: String, itemCode: ItemCode)
- extends ProfitShare {
- def taxRate: Option[BigDecimal] = None
- def shareOf(item: InvoiceItem) = None
- }
- case class FixedShare(name: String, itemCode: ItemCode, shareAmount: BigDecimal, taxRate: Option[BigDecimal] = None)
- extends ProfitShare {
- def shareOf(item: InvoiceItem) = {
- if(item.code == itemCode){
- Some(BasicInvoiceItem(itemCode, name, None, item.unit, item.quantity, taxRate, shareAmount))
- } else None
- }
- }
- case class RelativeShare(name: String, itemCode: ItemCode, shareRatio: BigDecimal, taxRate: Option[BigDecimal] = None)
- extends ProfitShare {
- if(shareRatio>1 || shareRatio<=0) throw new IllegalArgumentException("Unit price ratio must be between (0,1>")
- def shareOf(item: InvoiceItem) = {
- if(item.code == itemCode){
- Some(BasicInvoiceItem(itemCode, name, None, item.unit, item.quantity, taxRate, item.unitPrice*shareRatio))
- } else None
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement