`This brings me to an important question: does one needs to bill by a (sales) order or by active licenses a customer has? Both options have an impact on your design. `
I think it is blur to me the difference, i think it is both because
there can be upgrade payments, as we upgrade accounts with different levels
so customer has types and it encloses the business rules that get affected when you do an upgrade from user basic to pro for instance
So all in all for this part we have both, we need to bill by sales and by active licenses a customer has.
============================
So the `Installed Base of your customer: the collection of licenses he has. `
Is a class InstalledBaseProduct or just InstalledBase that keeps tracks of what it is configured by the customer on checkout or keep tracks of what he already has? I did not have that clear.
Also you mentioned `to a virtual product `:
interface InstalledBaseInterface
{
function getLicenseCollectionConfiguredWithoutKeys();
function getLicenseCollectionUserCurrentlyHas(); ?
function ....? metadata?
// I guess the implementation has the info upon fulfillment/installation?
function getCustomer();
function getVirtualProduct(); ?
}
============
`In both cases you'll need to create a sales order to register customers demand. `
I take this above to mean that the creation or processing of sales order is to tie a cart/order to a given user?
================
So how to implement with which services or managers (business rules, i am using Ruler from bobthecow) ?
class SalesOrder
{
const STATE_OVERDUE = 'sale overdue';
const STATE_PREPARING = 'sale preparing';
const STATE_OTHER = 'another state';
function getStateOfOrder();
}
==============
your last comment was on a say a grouping of transactions, this i guess will be in the case when we don't charge the customer upon getting the license but after the batch process for the monthly cycle runs, is this what you mean to save in transactions?
I wonder how much do we save on transactions if we have a considerable amount of users or such other factors.
Encouragements
cordoval /o/
let's go vespolina community!