Esempio n. 1
0
    def add(databases, idstate, idsenderua, idreceiverua):
        db_sender_name, db_sender = MailService.__findDatabaseForUserAddress(databases, idsenderua)
        db_receiver_name, db_receiver = MailService.__findDatabaseForUserAddress(databases, idreceiverua)
        if db_receiver is None or db_receiver is None:
            return None

        code = codes.rev_codes[db_sender_name]
        generatedBarcode = MailService.__genBarcode(code)
        insertStatement = db_sender.statement(Mail, "insert").values(
            barcode=generatedBarcode,
            idstate=idstate,
            idreceiveruseraddress=idreceiverua,
            idsenderuseraddress=idsenderua,
        )
        # Duplicate the data in the sender database
        result = db_sender.execute(insertStatement)
        if result is not None:
            idsenderdb = result.inserted_primary_key[0]
            MailStateHistoryService.add(db_sender, 1, idsenderdb)
        if db_sender == db_receiver:
            return generatedBarcode
        # And in the receiver database
        result = db_receiver.execute(insertStatement)
        if result is not None:
            idreceiverdb = result.inserted_primary_key[0]
            MailStateHistoryService.add(db_receiver, 1, idreceiverdb)
        return generatedBarcode
Esempio n. 2
0
    def update(databases, barcode, idstate):
        db_sender = MailService.findDatabaseForBarcode(databases, barcode)
        if db_sender is None:
            return None

        currentMail = MailService.selectByBarcode(db_sender, barcode)
        if currentMail is None:
            return None

        db_sender_name, db_sender = MailService.__findDatabaseForUserAddress(databases, currentMail.idsenderuseraddress)
        db_receiver_name, db_receiver = MailService.__findDatabaseForUserAddress(
            databases, currentMail.idreceiveruseraddress
        )
        if db_sender is None or db_receiver is None:
            return None

        updateStatement = (
            db_sender.statement(Mail, "update").where(Mail.__table__.c.barcode == barcode).values(idstate=idstate)
        )
        MailStateHistoryService.add(db_sender, currentMail.idstate, currentMail.idmail)
        r1 = db_sender.execute(updateStatement)
        if db_sender == db_receiver:
            return r1 is not None
        r2 = db_receiver.execute(updateStatement)
        return r1 is not None and r2 is not None