This howto explains using Saleculator for subscription based billing
This method makes use of advance payment for tracking active subscriptions.
1. Accept advance payment from customers.
2. Make a sale choosing the right subscription package for the advance paid. Use Advance for payment.
Administrator Menu > Maintenance > Resources
3. Use below section in Printer.Ticket to print subscription expiry date. Change the value 30 to desired value for subscription validity in days.
#if (($ticket.getCustomer() && $ticket.getCustomer().getAdvanceDate())
#set($y = $ticket.getCustomer().getAdvanceDate().getYear() + 1900)
#set($m = $ticket.getCustomer().getAdvanceDate().getMonth() + 1)
#set($d = $ticket.getCustomer().getAdvanceDate().getDate())
#set($d = $d + 30)
#if ((($m ==4) || ($m ==6) || ($m ==9) || ($m ==11)) && ($d > 30))
#set($m = $m + 1)
#set($d = $d - 30)
#elseif (($m ==2) && ($d > 28))
#set($m = $m + 1)
#set($d = $d - 28)
#elseif ($d > 31)
#set($m = $m + 1)
#set($d = $d - 31)
#end
#if($m > 12)
#set($m = 1)
#set($y = $y + 1)
#end
<line>
<text align ="center" length="48" bold="true">Expires On: $d/$m/$y</text>
</line>
#end
4. Use below script in event.total to cancel billing for inactive subscribers. Change the value 30 to desired value for subscription validity in days.
if(ticket.getCustomer()!=null)
{
if(ticket.getCustomer().getAdvanceDate()!=null)
{
long diff = ticket.getDate().getTime() - ticket.getCustomer().getAdvanceDate().getTime();
int diffDays = (int) (diff / (24 * 60 * 60 * 1000));
javax.swing.JOptionPane.showMessageDialog(null, diffDays);
if(diffDays>30)
{
return "Cancel";
}
}
}
Save
Leave a Reply