Esempio n. 1
0
    def __init__(self, account, period=current_period(), \
                 parent=0, *args, **kwargs):
        super(OperationWidget, self).__init__(parent=parent, *args, **kwargs)
        ANMPeriodHolder.__init__(self, period, *args, **kwargs)

        # set global account
        self.account = account
        self.main_period = period
        self.balance = account_balance(self.account, period)

        self.table = OperationTableWidget(parent=self, period=self.main_period)

        self.title = ANMPageTitle(_(u"Transactions List for Account " \
                                    u"%(number)s: %(name)s.") \
                                    % {'name': self.account.name, \
                                       'number': self.account.number})

        self.balance_title = ANMPageTitle(_(u"Balance: " u"%(balance)s FCFA") \
                                    % {'balance': \
                                              formatted_number(account_balance(self.account, period))})
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(self.table)

        formbox = QtGui.QFormLayout()
        self.order_number = QtGui.QLineEdit()
        self.invoice_number = QtGui.QLineEdit()
        self.invoice_date = QtGui.QDateTimeEdit(QtCore.QDate.currentDate())
        self.invoice_date.setDisplayFormat("yyyy-MM-dd")
        # change date if appropriate
        self.adjust_date_field()
        self.provider = QtGui.QLineEdit()
        self.amount = QtGui.QLineEdit()
        self.amount.setValidator(QtGui.QIntValidator())
        butt = QtGui.QPushButton(_(u"Add"))
        butt.clicked.connect(self.add_operation)

        formbox1 = QtGui.QHBoxLayout()
        formbox1.addWidget(QtGui.QLabel(_(u'Order number')))
        formbox1.addWidget(QtGui.QLabel(_(u'Invoice number')))
        formbox1.addWidget(QtGui.QLabel(_(u'Invoice date')))
        formbox1.addWidget(QtGui.QLabel(_(u'Provider')))
        formbox1.addWidget(QtGui.QLabel(_(u'Amount')))
        formbox1.addSpacing(90)

        formbox = QtGui.QHBoxLayout()
        formbox.addWidget(self.order_number)
        formbox.addWidget(self.invoice_number)
        formbox.addWidget(self.invoice_date)
        formbox.addWidget(self.provider)
        formbox.addWidget(self.amount)
        formbox.addWidget(butt)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.title)
        vbox.addWidget(self.balance_title)
        vbox.addWidget(self.periods_bar)
        vbox.addLayout(formbox1)
        vbox.addLayout(formbox)
        vbox.addLayout(hbox)

        self.setLayout(vbox)
Esempio n. 2
0
class OperationWidget(ANMWidget, ANMPeriodHolder):
    def __init__(self, account, period=current_period(), \
                 parent=0, *args, **kwargs):
        super(OperationWidget, self).__init__(parent=parent, *args, **kwargs)
        ANMPeriodHolder.__init__(self, period, *args, **kwargs)

        # set global account
        self.account = account
        self.main_period = period
        self.balance = account_balance(self.account, period)

        self.table = OperationTableWidget(parent=self, period=self.main_period)

        self.title = ANMPageTitle(_(u"Transactions List for Account " \
                                    u"%(number)s: %(name)s.") \
                                    % {'name': self.account.name, \
                                       'number': self.account.number})

        self.balance_title = ANMPageTitle(_(u"Balance: " u"%(balance)s FCFA") \
                                    % {'balance': \
                                              formatted_number(account_balance(self.account, period))})
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(self.table)

        formbox = QtGui.QFormLayout()
        self.order_number = QtGui.QLineEdit()
        self.invoice_number = QtGui.QLineEdit()
        self.invoice_date = QtGui.QDateTimeEdit(QtCore.QDate.currentDate())
        self.invoice_date.setDisplayFormat("yyyy-MM-dd")
        # change date if appropriate
        self.adjust_date_field()
        self.provider = QtGui.QLineEdit()
        self.amount = QtGui.QLineEdit()
        self.amount.setValidator(QtGui.QIntValidator())
        butt = QtGui.QPushButton(_(u"Add"))
        butt.clicked.connect(self.add_operation)

        formbox1 = QtGui.QHBoxLayout()
        formbox1.addWidget(QtGui.QLabel(_(u'Order number')))
        formbox1.addWidget(QtGui.QLabel(_(u'Invoice number')))
        formbox1.addWidget(QtGui.QLabel(_(u'Invoice date')))
        formbox1.addWidget(QtGui.QLabel(_(u'Provider')))
        formbox1.addWidget(QtGui.QLabel(_(u'Amount')))
        formbox1.addSpacing(90)

        formbox = QtGui.QHBoxLayout()
        formbox.addWidget(self.order_number)
        formbox.addWidget(self.invoice_number)
        formbox.addWidget(self.invoice_date)
        formbox.addWidget(self.provider)
        formbox.addWidget(self.amount)
        formbox.addWidget(butt)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.title)
        vbox.addWidget(self.balance_title)
        vbox.addWidget(self.periods_bar)
        vbox.addLayout(formbox1)
        vbox.addLayout(formbox)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

    def add_operation(self):
        ''' add operation '''
        year, month, day = self.invoice_date.text().split('-')
        invoice_date = date(int(year), int(month), int(day))
        period = period_for(invoice_date)

        try:
            amount = int(self.amount.text())
        except ValueError:
            amount = 0

        if self.order_number.text() and self.invoice_number.text() and \
            invoice_date and self.provider.text() and self.amount.text()\
            and invoice_date >= self.main_period.start_on and invoice_date <= \
            self.main_period.end_on and amount < self.balance:
            operation = Operation(unicode(self.order_number.text()),
                        unicode(self.invoice_number.text()), invoice_date, \
                        unicode(self.provider.text()), amount)
            operation.account = self.account
            operation.period = period
            session.add(operation)
            session.commit()
            raise_success(_(u'Confirmation'), _(u'Registered opération'))
            self.order_number.clear()
            self.invoice_number.clear()
            self.provider.clear()
            self.amount.clear()
            self.adjust_balance(period)
            self.refresh()
        elif invoice_date > self.main_period.end_on or\
             invoice_date < self.main_period.start_on:
            raise_error(_(u'Error date'), \
            _(u'The date is not included in the current quarter.'))
        elif amount >= self.balance:
            raise_error(_(u'Error money'),\
             _(u"There is not enough money for this operation."))
        else:
            raise_error(_(u'Error field'), _(u'You must fill in all fields.'))

    def refresh(self):
        ''' refreshed Table '''
        self.table.refresh_period(self.main_period)

    def change_period(self, period):
        '''change period'''
        self.adjust_date_field()
        self.adjust_balance(period)
        self.table.refresh_period(period)

    def adjust_balance(self, period):
        ''' adjusts the balance by period '''
        self.balance = account_balance(self.account, period)
        self.balance_title.setText(_(u"Balance: " u"%(balance)s FCFA") \
                                    % {'balance': \
                                              formatted_number(self.balance)})

    def adjust_date_field(self):
        ''' adjusts the date '''
        if period_for(qdate2date(self.invoice_date.date())) ==\
                                                        self.main_period:
            # keep what's on
            return
        if period_for(date.today()) == self.main_period:
            new_date = date.today()
        else:
            new_date = self.main_period.start_on
        self.invoice_date.setDate(new_date)