('match',models.CharField(blank=True,help_text="Python <a href='https://docs.python.org/2/library/functions.html#eval'>expression</a> that designates wheter a <tt>content_type</tt> object is related to this service or not, always evaluates <tt>True</tt> when left blank. Related instance can be instantiated with <tt>instance</tt> keyword or <tt>content_type.model_name</tt>.</br><tt> databaseuser.type == 'MYSQL'</tt><br><tt> miscellaneous.active and str(miscellaneous.identifier).endswith(('.org', '.net', '.com'))</tt><br><tt> contractedplan.plan.name == 'association_fee''</tt><br><tt> instance.active</tt>",max_length=256,verbose_name='match')),
('handler_type',models.CharField(blank=True,choices=[('','Default')],help_text='Handler used for processing this Service. A handler enables customized behaviour far beyond what options here allow to.',max_length=256,verbose_name='handler')),
('ignore_superusers',models.BooleanField(default=True,help_text='Designates whether superuser, staff and friend orders are marked as ignored by default or not.',verbose_name='ignore superuser, staff and friend')),
('billing_period',models.CharField(blank=True,choices=[('','One time service'),('MONTHLY','Monthly billing'),('ANUAL','Anual billing')],default='ANUAL',help_text='Renewal period for recurring invoicing.',max_length=16,verbose_name='billing period')),
('billing_point',models.CharField(choices=[('ON_REGISTER','Registration date'),('ON_FIXED_DATE','Every January')],default='ON_FIXED_DATE',help_text='Reference point for calculating the renewal date on recurring invoices',max_length=16,verbose_name='billing point')),
('is_fee',models.BooleanField(default=False,help_text='Designates whether this service should be billed as membership fee or not',verbose_name='fee')),
('order_description',models.CharField(blank=True,help_text="Python <a href='https://docs.python.org/2/library/functions.html#eval'>expression</a> used for generating the description for the bill lines of this services.<br>Defaults to <tt>'%s: %s'% (ugettext(handler.description), instance)</tt>",max_length=256,verbose_name='Order description')),
('ignore_period',models.CharField(blank=True,choices=[('','Never'),('ONE_DAY','One day'),('TWO_DAYS','Two days'),('TEN_DAYS','Ten days'),('ONE_MONTH','One month')],default='TEN_DAYS',help_text='Period in which orders will be ignored if cancelled. Useful for designating <i>trial periods</i>',max_length=16,verbose_name='ignore period')),
('metric',models.CharField(blank=True,help_text="Python <a href='https://docs.python.org/2/library/functions.html#eval'>expression</a> used for obtinging the <i>metric value</i> for the pricing rate computation. Number of orders is used when left blank. Related instance can be instantiated with <tt>instance</tt> keyword or <tt>content_type.model_name</tt>.<br><tt> max((mailbox.resources.disk.allocated or 0) -1, 0)</tt><br><tt> miscellaneous.amount</tt><br><tt> max((account.resources.traffic.used or 0) - getattr(account.miscellaneous.filter(is_active=True, service__name='traffic-prepay').last(), 'amount', 0), 0)</tt>",max_length=256,verbose_name='metric')),
('pricing_period',models.CharField(blank=True,choices=[('','Current value'),('BILLING_PERIOD','Same as billing period'),('MONTHLY','Monthly data'),('ANUAL','Anual data')],default='BILLING_PERIOD',help_text='Time period that is used for computing the rate metric.',max_length=16,verbose_name='pricing period')),
('rate_algorithm',models.CharField(choices=[('orchestra.contrib.plans.ratings.step_price','Step price'),('orchestra.contrib.plans.ratings.match_price','Match price'),('orchestra.contrib.plans.ratings.best_price','Best price')],default='orchestra.contrib.plans.ratings.step_price',help_text='Algorithm used to interprete the rating table.<br> Step price: All rates with a quantity lower or equal than the metric are applied. Nominal price will be used when initial block is missing.<br> Match price: Only <b>the rate</b> with a) inmediate inferior metric and b) lower price is applied. Nominal price will be used when initial block is missing.<br> Best price: Produces the best possible price given all active rating lines (those with quantity lower or equal to the metric).',max_length=64,verbose_name='rate algorithm')),
('on_cancel',models.CharField(choices=[('NOTHING','Nothing'),('DISCOUNT','Discount'),('COMPENSATE','Compensat'),('REFUND','Refund')],default='DISCOUNT',help_text='Defines the cancellation behaviour of this service.',max_length=16,verbose_name='on cancel')),
('payment_style',models.CharField(choices=[('PREPAY','Prepay'),('POSTPAY','Postpay (on demand)')],default='PREPAY',help_text='Designates whether this service should be paid after consumtion (postpay/on demand) or prepaid.',max_length=16,verbose_name='payment style')),
('content_type',models.ForeignKey(help_text='Content type of the related service objects.',on_delete=django.db.models.deletion.CASCADE,to='contenttypes.ContentType',verbose_name='content type')),
('periodic_update',models.BooleanField(default=False,help_text='Whether a periodic update of this service orders should be performed or not. Needed for <tt>match</tt> definitions that depend on complex model interactions, where <tt>content type</tt> model save and delete operations are not enought.',verbose_name='periodic update')),