def test_recurring(self): from seantisinvoice.models import DBSession from seantisinvoice.models import Invoice, InvoiceItem from seantisinvoice.recurring import copy_recurring session = DBSession() copy_recurring() self.assertEquals(0, session.query(Invoice).count()) # Add a new invoice invoice = Invoice() invoice_date = datetime.date.today() - datetime.timedelta(days=100) invoice.date = invoice_date invoice.due_date = datetime.date.today() - datetime.timedelta(days=70) invoice.project_description = u'Invoice project description' session.add(invoice) # Add an item to the invoice item = InvoiceItem() item.item_number = 0 item.amount = 1000 item.service_description = u'Item description' item.service_title = u'Invoice item' item.invoice = invoice session.merge(item) copy_recurring() # Invoice not cloned as it has no recurring_date self.assertEquals(1, session.query(Invoice).count()) invoice = session.query(Invoice).one() # Set the recurring date on the invoice recurring_date = datetime.date.today() - datetime.timedelta(days=70) invoice.recurring_date = recurring_date copy_recurring() # There are now two invoices self.assertEquals(2, session.query(Invoice).count()) invoice = session.query(Invoice).filter_by(date=invoice_date).one() # Recurring date of the original invoice has been reset self.failIf(invoice.recurring_date) cloned_invoice = session.query(Invoice).filter_by( date=recurring_date).one() # New invoice has the recurring date of the original one as date self.assertEquals(recurring_date, cloned_invoice.date) self.assertEquals(recurring_date + datetime.timedelta(days=30), cloned_invoice.recurring_date) # Check whether attributes on invoice and invoice item have been cloned self.assertEquals(invoice.project_description, cloned_invoice.project_description) cloned_item = cloned_invoice.items[0] self.assertEquals(item.amount, cloned_item.amount) self.assertEquals(item.service_description, cloned_item.service_description) self.assertEquals(item.service_title, cloned_item.service_title)
def test_recurring(self): from seantisinvoice.models import DBSession from seantisinvoice.models import Invoice, InvoiceItem from seantisinvoice.recurring import copy_recurring session = DBSession() copy_recurring() self.assertEquals(0, session.query(Invoice).count()) # Add a new invoice invoice = Invoice() invoice_date = datetime.date.today() - datetime.timedelta(days=100) invoice.date = invoice_date invoice.due_date = datetime.date.today() - datetime.timedelta(days=70) invoice.project_description = u"Invoice project description" session.add(invoice) # Add an item to the invoice item = InvoiceItem() item.item_number = 0 item.amount = 1000 item.service_description = u"Item description" item.service_title = u"Invoice item" item.invoice = invoice session.merge(item) copy_recurring() # Invoice not cloned as it has no recurring_date self.assertEquals(1, session.query(Invoice).count()) invoice = session.query(Invoice).one() # Set the recurring date on the invoice recurring_date = datetime.date.today() - datetime.timedelta(days=70) invoice.recurring_date = recurring_date copy_recurring() # There are now two invoices self.assertEquals(2, session.query(Invoice).count()) invoice = session.query(Invoice).filter_by(date=invoice_date).one() # Recurring date of the original invoice has been reset self.failIf(invoice.recurring_date) cloned_invoice = session.query(Invoice).filter_by(date=recurring_date).one() # New invoice has the recurring date of the original one as date self.assertEquals(recurring_date, cloned_invoice.date) self.assertEquals(recurring_date + datetime.timedelta(days=30), cloned_invoice.recurring_date) # Check whether attributes on invoice and invoice item have been cloned self.assertEquals(invoice.project_description, cloned_invoice.project_description) cloned_item = cloned_invoice.items[0] self.assertEquals(item.amount, cloned_item.amount) self.assertEquals(item.service_description, cloned_item.service_description) self.assertEquals(item.service_title, cloned_item.service_title)
def copy_recurring(): today = datetime.date.today() session = DBSession() query = session.query(Invoice) query = query.filter(Invoice.recurring_date <= today) query = query.filter( or_(Invoice.recurring_stop == None, Invoice.recurring_stop > today)) for invoice in query.all(): # Clone invoice and invoice items invoice_clone = Invoice() invoice_clone.company = invoice.company invoice_clone.contact = invoice.contact invoice_clone.project_description = invoice.project_description invoice_clone.currency = invoice.currency invoice_clone.tax = invoice.tax session.add(invoice_clone) for item in invoice.items: item_clone = InvoiceItem() item_clone.item_number = item.item_number item_clone.amount = item.amount item_clone.hours = item.hours item_clone.days = item.days item_clone.service_description = item.service_description item_clone.service_title = item.service_title item_clone.invoice = invoice_clone session.add(item_clone) # Get new invoice number invoice_clone.invoice_number = next_invoice_number() # Adjust dates on cloned invoice invoice_clone.date = invoice.recurring_date invoice_clone.due_date = invoice_clone.date + (invoice.due_date - invoice.date) invoice_clone.recurring_date = invoice_clone.date + ( invoice.recurring_date - invoice.date) invoice_clone.recurring_stop = invoice.recurring_stop # Old invoice is not recurring anymore invoice.recurring_date = None transaction.commit()
def copy_recurring(): today = datetime.date.today() session = DBSession() query = session.query(Invoice) query = query.filter(Invoice.recurring_date <= today) query = query.filter(or_(Invoice.recurring_stop == None, Invoice.recurring_stop > today)) for invoice in query.all(): # Clone invoice and invoice items invoice_clone = Invoice() invoice_clone.company = invoice.company invoice_clone.contact = invoice.contact invoice_clone.project_description = invoice.project_description invoice_clone.currency = invoice.currency invoice_clone.tax = invoice.tax session.add(invoice_clone) for item in invoice.items: item_clone = InvoiceItem() item_clone.item_number = item.item_number item_clone.amount = item.amount item_clone.hours = item.hours item_clone.days = item.days item_clone.service_description = item.service_description item_clone.service_title = item.service_title item_clone.invoice = invoice_clone session.add(item_clone) # Get new invoice number invoice_clone.invoice_number = next_invoice_number() # Adjust dates on cloned invoice invoice_clone.date = invoice.recurring_date invoice_clone.due_date = invoice_clone.date + (invoice.due_date - invoice.date) invoice_clone.recurring_date = invoice_clone.date + (invoice.recurring_date - invoice.date) invoice_clone.recurring_stop = invoice.recurring_stop # Old invoice is not recurring anymore invoice.recurring_date = None transaction.commit()
def _add_invoice(self): from seantisinvoice.models import Invoice from seantisinvoice.models import InvoiceItem from seantisinvoice.models import DBSession session = DBSession() customer = self._add_customer() invoice = Invoice() invoice.project_description = u'Project' invoice.date = datetime.date.today() invoice.due_date = invoice.date + datetime.timedelta(days=30) invoice.currency = u'CHF' invoice.contact = customer.contacts[0] session.add(invoice) # Add invoice item to the invoice item = InvoiceItem() item.item_number = 0 item.service_title = u'Testing' item.service_description = u'A lot of work!' item.amount = 1000.0 item.invoice = invoice session.add(item) session.flush() return invoice
def _add_invoice(self): from seantisinvoice.models import Invoice from seantisinvoice.models import InvoiceItem from seantisinvoice.models import DBSession session = DBSession() customer = self._add_customer() invoice = Invoice() invoice.project_description = u"Project" invoice.date = datetime.date.today() invoice.due_date = invoice.date + datetime.timedelta(days=30) invoice.currency = u"CHF" invoice.contact = customer.contacts[0] session.add(invoice) # Add invoice item to the invoice item = InvoiceItem() item.item_number = 0 item.service_title = u"Testing" item.service_description = u"A lot of work!" item.amount = 1000.0 item.invoice = invoice session.add(item) session.flush() return invoice