@startuml
class digitalmarketing.MarketModel.AdSetsReport {
~ Business business
~ ArrayList<AdSetSummary> adSetSummaries
+ void sortByRank()
+ void printTopRank()
}
class digitalmarketing.MarketModel.AdSetSummary {
~ AdSet subjectAdSet
~ int totalCost
~ int salesRevenue
~ int orderQuantity
+ int getSalesRevenue()
+ void printDetails()
}
class digitalmarketing.ProductManagement.ProductsReport {
~ Business business
~ ArrayList<ProductSummary> productSummaries
+ void addProductSummary(ProductSummary)
+ void print()
+ void sortByRank()
+ void printTopRank(int)
}

class digitalmarketing.MarketModel.AdSetDirectory {
~ Business business
~ ArrayList<AdSet> adSets
+ ArrayList<AdSet> getAdSets()
+ AdSet newAdSet(String,String,String,int)
+ void printDetails()
}
class digitalmarketing.ProductManagement.ProductSummary {
~ Product subjectProduct
~ int quantitySold
~ int salesRevenue
~ int salesPerformance
~ int rank
+ int getSalesRevenue()
+ int getRank()
+ void print()
}
class digitalmarketing.OrderManagement.OrderSummary {
~ Order order
~ int salesRevenue
+ int getSalesRevenue()
}
class digitalmarketing.CustomerManagement.CustomerDirectory {
~ Business business
~ ArrayList<CustomerProfile> customers
+ ArrayList<CustomerProfile> getCustomers()
+ CustomerProfile newCustomerProfile(String)
+ CustomerProfile findCustomer(String)
+ void printDetails()
}
class digitalmarketing.MarketModel.AdSetSummaryComparator {
+ int compare(AdSetSummary,AdSetSummary)
}
class digitalmarketing.ProductManagement.Bundle {
~ String title
~ ArrayList<Product> bundledProducts
~ ArrayList<Market> targetMarkets
~ HashMap<MarketChannelAssignment,Integer> discountMap
~ ArrayList<OrderKit> orderKits
+ String getTitle()
+ ArrayList<Product> getBundledProducts()
+ int getOriginalPrice()
+ ArrayList<OrderKit> getOrderKits()
+ HashMap<MarketChannelAssignment,Integer> getDiscountMap()
+ void addProduct(Product)
+ void addToDiscountMap(MarketChannelAssignment,Integer)
+ int calculateOriginalPrice()
+ int getSalesRevenue()
+ int getQuantitySold()
+ void printDetails()
}

class digitalmarketing.OrderManagement.Order {
~ CustomerProfile customer
~ ArrayList<OrderKit> orderKits
~ MarketChannelAssignment mcAssignment
+ MarketChannelAssignment getMcAssignment()
+ OrderKit newOrderKit(Bundle,int)
+ void addOrderKit(OrderKit)
+ int getSalesRevenue()
+ ArrayList<OrderKit> getOrderKits()
+ boolean isBundleInOrder(Bundle)
+ int getTotalOriginalPrice()
+ int getTotalSavings()
+ void displayForCustomer()
+ void printDetails()
}
class digitalmarketing.OrderManagement.OrdersReport {
~ Business business
~ ArrayList<OrderSummary> orderSummaries
~ int totalSalesRevenue
~ int orderQuantity
~ int averageOrderValue
+ int getTotalSalesRevenue()
+ int getOrderQuantity()
+ int getAverageOrderValue()
+ void printDescription()
}
class digitalmarketing.MarketModel.MarketChannelAssignmentDirectory {
~ Business business
~ ArrayList<MarketChannelAssignment> assignments
+ ArrayList<MarketChannelAssignment> getAssignments()
+ MarketChannelAssignment newAssignment(Market,Channel)
+ MarketChannelAssignment newAssignment(String,String,String)
+ MarketChannelAssignment findAssignment(String,String)
}


class digitalmarketing.MarketModel.Channel {
~ String name
~ ArrayList<Market> markets
~ ArrayList<AdSet> adSets
~ ArrayList<MarketChannelAssignment> assignments
~ ArrayList<Order> channelOrders
+ String getName()
+ ArrayList<Market> getMarkets()
+ ArrayList<MarketChannelAssignment> getAssignments()
+ ArrayList<Order> getChannelOrders()
+ int getSalesRevenue()
+ int getOrderQuantity()
+ void printDetails()
}

class digitalmarketing.MarketModel.ChannelDirectory {
~ Business business
~ ArrayList<Channel> channels
+ ArrayList<Channel> getChannels()
+ Channel newChannel(String)
+ Channel findChannel(String)
+ void printDetails()
}
class digitalmarketing.CustomerManagement.CustomerProfile {
~ ArrayList<Order> orders
~ Person person
~ Market market
+ String getId()
+ Market getMarket()
+ void setMarket(Market)
+ int getTotalPricePerformance()
+ boolean isMatch(String)
+ void addCustomerOrder(Order)
+ void print()
}
class digitalmarketing.MarketModel.MarketChannelAssignment {
~ String code
~ Market market
~ Channel channel
~ AdSet adSet
~ ArrayList<Bundle> displayBundles
+ String getCode()
+ Market getMarket()
+ Channel getChannel()
+ AdSet getAdSet()
+ ArrayList<Bundle> getDisplayBundles()
+ void setAdSet(AdSet)
+ int getKitDiscount(Bundle)
+ int getKitFinalPrice(Bundle)
+ void displayBundlesForCustomer()
}

class digitalmarketing.OrderManagement.OrderDirectory {
~ Business business
~ ArrayList<Order> orders
~ OrdersReport ordersReport
+ Order newOrder(CustomerProfile,MarketChannelAssignment)
+ Order newOrder(String,String,String)
+ int getTotalRevenue()
+ ArrayList<Order> getOrders()
+ void printDetails()
}
class digitalmarketing.ProductManagement.ProductDirectory {
~ Business business
~ ArrayList<Product> products
+ ArrayList<Product> getProducts()
+ Product newProduct(String,int)
+ void printDetails()
}
class digitalmarketing.ProductManagement.BundleSummary {
~ Bundle subjectBundle
~ int salesRevenue
~ int quantitySold
+ int getSalesRevenue()
+ void printDetails()
}
class digitalmarketing.CustomerManagement.CustomerSummary {
~ Order subjectOrder
~ int orderQuantity
}
class digitalmarketing.ProductManagement.BundlesReport {
~ Business business
~ ArrayList<BundleSummary> bundleSummaries
+ void sortByRank()
+ void printTopRank()
}
class digitalmarketing.ProductManagement.BundleDirectory {
~ Business business
~ ArrayList<Bundle> bundles
+ ArrayList<Bundle> getBundles()
+ Bundle newBundle(String)
+ Bundle newBundle(String,ArrayList<String>)
+ void addProductToBundle(String,String)
+ Bundle findBundle(String)
+ void printDetails()
}
class digitalmarketing.MarketModel.Market {
~ String name
~ ArrayList<CustomerProfile> customerGroup
~ ArrayList<Channel> channels
~ ArrayList<MarketChannelAssignment> assignments
~ ArrayList<Order> marketOrders
+ String getName()
+ int getSize()
+ ArrayList<CustomerProfile> getCustomerGroup()
+ ArrayList<Channel> getChannels()
+ ArrayList<MarketChannelAssignment> getAssignments()
+ ArrayList<Order> getMarketOrders()
+ MarketChannelAssignment newAssignment(Channel)
+ int getSalesRevenue()
+ int getOrderQuantity()
+ void printDetails()
}
class digitalmarketing.CustomerManagement.CustomersReport {
~ ArrayList<CustomerSummary> customerSummaries
+ void addCustomerSummary(CustomerSummary)
}

class digitalmarketing.MarketModel.ChannelSummary {
~ Channel subjectChannel
~ int salesRevenue
~ int orderQuantity
+ int getSalesRevenue()
+ void printDetails()
}
class digitalmarketing.MarketModel.MarketDirectory {
~ Business business
~ ArrayList<Market> markets
~ ArrayList<MarketChannelAssignment> assignments
+ ArrayList<Market> getMarkets()
+ ArrayList<MarketChannelAssignment> getAssignments()
+ Market newMarket(String)
+ CustomerProfile addCustomerToMarket(String,String)
+ MarketChannelAssignment newAssignment(Market,Channel)
+ Market findMarket(String)
+ void printDetails()
}
class digitalmarketing.OrderManagement.OrderKit {
~ Bundle selectedBundle
~ int finalPrice
~ int quantitySold
~ int discount
~ Order order
+ Bundle getSelectedBundle()
+ int getTotalFinalPrice()
+ int getTotalOriginalPrice()
+ int getQuantitySold()
+ int getTotalDiscount()
+ void printDetails()
+ void displayForCustomer()
}
class digitalmarketing.ProductManagement.Product {
~ String name
~ int targetPrice
~ ArrayList<OrderItem> orderItems
+ int getTargetPrice()
+ void addOrderItem(OrderItem)
+ int getProductSalesPerformance()
+ int getProductSalesRevenue()
+ int geProductQuantitySold()
+ String getName()
+ void printDetails()
}
class digitalmarketing.MarketModel.MarketsReport {
~ Business business
~ ArrayList<MarketSummary> marketSummaries
+ void sortByRank()
+ void printTopRank()
}

class digitalmarketing.MarketModel.MarketSummary {
~ Market subjectMarket
~ int size
~ int salesRevenue
~ int orderQuantity
+ int getSalesRevenue()
+ void printDetails()
}
class digitalmarketing.Business.Business {
~ String name
~ OrderDirectory orderDirectory
~ CustomerDirectory customerDirectory
~ ProductDirectory productDirectory
~ BundleDirectory bundleDirectory
~ MarketDirectory marketDirectory
~ ChannelDirectory channelDirectory
~ AdSetDirectory adSetDirectory
~ MarketChannelAssignmentDirectory assignmentDirectory
+ CustomerDirectory getCustomerDirectory()
+ OrderDirectory getOrderDirectory()
+ ProductDirectory getProductDirectory()
+ BundleDirectory getBundleDirectory()
+ MarketDirectory getMarketDirectory()
+ ChannelDirectory getChannelDirectory()
+ AdSetDirectory getAdSetDirectory()
+ MarketChannelAssignmentDirectory getAssignmentDirectory()
}

class digitalmarketing.MarketModel.ChannelsReport {
~ Business business
~ ArrayList<ChannelSummary> channelSummaries
+ void sortByRank()
+ void printTopRank()
}

class digitalmarketing.MarketModel.AdSet {
~ String name
~ String description
~ MarketChannelAssignment mca
~ int costPerSale
~ ArrayList<Order> adSetOrders
+ String getName()
+ String getDescription()
+ ArrayList<Order> getAdLeadOrders()
+ int getTotalCost()
+ int getOrderCount()
+ int getSalesRevenue()
+ int getOrderQuantity()
+ void displayForCustomer()
+ void printDetails()
}

@enduml