예제 #1
0
    def testExistingCompanyName(self):
        """ Using existing names for companies should raise an error """
        company = Company(name=COMPANY_1)
        self.db.save(company)

        company = Company(name=COMPANY_1)
        self.assertRaises(oks.InvalidNameError, self.db.save, company)
예제 #2
0
    def testCompanyNameChange(self):
        """ When a company is renamed, operations related to this company 
        should be updated """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        operation = Operation(company=COMPANY_1)
        operation_row_id = self.db.save(operation)

        company = self.db.load(oks.COMPANY, row_id=company_row_id)
        company.name = COMPANY_2
        self.db.save(company)

        operation = self.db.load(oks.OPERATION, row_id=operation_row_id)
        self.assertEquals(operation.company, COMPANY_2)
예제 #3
0
    def testItemNameChange(self):
        """ When any item is renamed, the related operation and production 
        items should be renamed too """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        item = Item(name=ITEM_1)
        item_row_id = self.db.save(item)

        operation = Operation(company=COMPANY_1)

        product = Product(name=ITEM_1)
        production_item = ProductionItem(name=ITEM_1)
        raw_material = RawMaterial(name=ITEM_1)
        exchange_item = ExchangeItem(name=ITEM_1)

        production_item.formula.insert(raw_material)
        operation.output.insert(product)
        operation.output.insert(production_item)
        operation.output.insert(exchange_item)
        operation_row_id = self.db.save(operation)

        item = self.db.load(oks.ITEM, row_id=item_row_id)
        item.name = ITEM_2
        item_row_id = self.db.save(item)

        operation = self.db.load(oks.OPERATION, row_id=operation_row_id)

        self.assertEquals(operation.output[0][0].name, ITEM_2)
        self.assertEquals(operation.output[1][0].name, ITEM_2)
        self.assertEquals(operation.output[1][0].formula[0][0].name, ITEM_2)
        self.assertEquals(operation.output[2][0].name, ITEM_2)
예제 #4
0
    def testInvalidCompanyOnInsert(self):
        """ A operation with an invalid company should not be able to be marked 
        as concluded """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        operation = Operation(company=COMPANY_2)
        operation_row_id = self.db.save(operation)

        self.assertRaises(oks.InvalidCompanyError, self.db.toggle_status,
                          oks.OPERATION, operation_row_id)
예제 #5
0
    def testInvalidItemCannotBeSaved(self):
        """ An item that doesn't exist should raise an exception when trying to 
        change its status """
        company = Company(name=COMPANY_1)
        self.db.save(company)

        item = Item(name=ITEM_1)
        item_row_id = self.db.save(item)

        operation = Operation(company=COMPANY_1)
        product = Product(name=ITEM_2)
        operation.output.insert(product)
        operation_row_id = self.db.save(operation)

        self.assertRaises(oks.InvalidItemError, self.db.toggle_status,
                          oks.OPERATION, operation_row_id)
예제 #6
0
    def testInvalidQuantity(self):
        """ Trying to take a given quantity from the Inventory that is larger 
        than what is available should raise an error """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        item = Item(name=ITEM_1, quantity=1)
        item_row_id = self.db.save(item)

        operation = Operation(company=COMPANY_1)
        product = Product(name=ITEM_1, quantity=2)
        operation.output.insert(product)
        operation_row_id = self.db.save(operation)

        self.assertRaises(oks.ItemQuantityError, self.db.toggle_status,
                          oks.OPERATION, operation_row_id)
예제 #7
0
파일: oks.py 프로젝트: alnvdl/oks
 def on_action_new_activate(self, widget):
     if self.table == TABLE_COMPANIES:
         response = self.run_editor(DialogCompany, self.db.save, Company())
     elif self.table == TABLE_INVENTORY:
         response = self.run_editor(DialogItem, self.db.save, Item())
     elif self.table == TABLE_OPERATIONS:
         dialog = DialogSelectOperationType(self.builder, self)
         response, type_, negative = dialog.run()
         dialog.close()
         if response == gtk.RESPONSE_OK:
             next_oid = self.services["next_oid"]
             oid = next_oid(type_, negative)
             operation = Operation(type_=type_, oid=oid)
             response = self.run_editor(DialogOperation, self.db.save,
                                        operation)
     if response == gtk.RESPONSE_OK:
         self.reload_search()
예제 #8
0
파일: oks.py 프로젝트: alnvdl/oks
 def resolve_reqs(self, *args):
     if self.assert_selected():
         operation_row_id = self.selected.row_id
         reqs = self.db.get_operation_reqs(operation_row_id)
         for req in reqs:
             req_type, description, quantity = req
             if req_type == 0:
                 company = Company(name=description)
                 self.run_editor(DialogCompany, self.db.save, company)
             elif req_type == 1 and not quantity:
                 item = Item(name=description, quantity=0)
                 self.run_editor(DialogItem, self.db.save, item)
         if reqs == []:
             self.show_message("Nada a cadastrar",
                               "A empresa e os itens necessários já estão "\
                               "cadastrados.", gtk.MESSAGE_INFO)
         else:
             self.show_message("Requisitos resolvidos",
                               "A empresa e os itens necessários foram "\
                               "cadastrados.", gtk.MESSAGE_INFO)
예제 #9
0
    def testProductionOperationStatusChange(self):
        """ A production operation should have its items added from the 
        inventory when concluded and put back when unconcluded. The raw 
        materials used in it should follow the reverse path"""
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        raw_material = Item(name=RAW_MATERIAL_1, quantity=100)
        raw_material_row_id = self.db.save(raw_material)

        production_item = Item(name=PRODUCTION_ITEM_1, quantity=3)
        production_item_row_id = self.db.save(production_item)

        operation = Operation(company=COMPANY_1,
                              type_=oks.TYPE_PRODUCTION_OPERATION)

        production_item = ProductionItem(name=PRODUCTION_ITEM_1,
                                         quantity=10,
                                         name_production=PRODUCTION_ITEM_1,
                                         quantity_production=10)
        volume = ProductionItem.calculate_volume(production_item.name)
        production_item.volume = volume
        raw_material = RawMaterial(name=RAW_MATERIAL_1, proportion=50)
        production_item.formula.insert(raw_material)
        operation.input.insert(production_item)

        operation_row_id = self.db.save(operation)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        production_item = self.db.load(oks.ITEM, row_id=production_item_row_id)
        raw_material = self.db.load(oks.ITEM, row_id=raw_material_row_id)
        self.assertEquals(production_item.quantity, 13.0)
        self.assertEquals(raw_material.quantity, 88.797956316250989)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        production_item = self.db.load(oks.ITEM, row_id=production_item_row_id)
        raw_material = self.db.load(oks.ITEM, row_id=raw_material_row_id)
        self.assertEquals(production_item.quantity, 3.0)
        self.assertEquals(raw_material.quantity, 100.0)
예제 #10
0
    def testInvalidProductOnUpdate(self):
        """ An operation item of any type should not be updated if it does not 
        exist """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        item = Item(name=ITEM_1)
        item_row_id = self.db.save(item)

        operation = Operation(company=COMPANY_1)
        product = Product(name=ITEM_1)
        operation.input.insert(product)
        operation_row_id = self.db.save(operation)

        operation = self.db.load(oks.OPERATION, row_id=operation_row_id)
        product = operation.input[0][0]
        product.name = ITEM_2
        operation.input.update(product, operation.input[0].iter)
        operation_row_id = self.db.save(operation)

        self.assertRaises(oks.InvalidItemError, self.db.toggle_status,
                          oks.OPERATION, operation_row_id)
예제 #11
0
    def testOperationInventoryIO(self):
        """
        Products, ProductionItems, RawMaterials and ExchangeItems should
        add to the Inventory when inside the input and subtract from it when
        inside the output
        """
        company = Company(name=COMPANY_1)
        self.db.save(company)

        item = Item(name=ITEM_1, quantity=10)
        item_row_id = self.db.save(item)

        item2 = Item(name=ITEM_2, quantity=100)
        item2_row_id = self.db.save(item2)

        operation = Operation(company=COMPANY_1, type_=oks.TYPE_SALE_OPERATION)

        product = Product(name=ITEM_1, quantity=3)
        product2 = Product(name=ITEM_2, quantity=27)

        operation.output.insert(product)
        operation.input.insert(product2)

        operation_row_id = self.db.save(operation)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        self.assertEquals(
            self.db.load(oks.ITEM, row_id=item_row_id).quantity, 7.0)
        self.assertEquals(
            self.db.load(oks.ITEM, row_id=item2_row_id).quantity, 127.0)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        self.assertEquals(
            self.db.load(oks.ITEM, row_id=item_row_id).quantity, 10.0)
        self.assertEquals(
            self.db.load(oks.ITEM, row_id=item2_row_id).quantity, 100.0)
예제 #12
0
 def testBlankCompanyName(self):
     """ Blank names for companies should raise an error """
     company = Company(name="")
     self.assertRaises(oks.InvalidNameError, self.db.save, company)
예제 #13
0
    def testProductionItemUpdate(self):
        """ A production item formula components should be taken from the 
        inventory, but when the item changes, the formula must be updated too """
        company = Company(name=COMPANY_1)
        company_row_id = self.db.save(company)

        raw_material = Item(name=RAW_MATERIAL_1, quantity=100)
        raw_material_row_id = self.db.save(raw_material)

        raw_material2 = Item(name=RAW_MATERIAL_2, quantity=130)
        raw_material2_row_id = self.db.save(raw_material2)

        production_item = Item(name=PRODUCTION_ITEM_1, quantity=3)
        production_item_row_id = self.db.save(production_item)

        operation = Operation(company=COMPANY_1,
                              type_=oks.TYPE_PRODUCTION_OPERATION)

        production_item = ProductionItem(name=PRODUCTION_ITEM_1,
                                         quantity=10,
                                         name_production=PRODUCTION_ITEM_1,
                                         quantity_production=10)
        volume = ProductionItem.calculate_volume(production_item.name)
        production_item.volume = volume
        raw_material = RawMaterial(name=RAW_MATERIAL_1, proportion=60)
        raw_material2 = RawMaterial(name=RAW_MATERIAL_2, proportion=10)

        production_item.formula.insert(raw_material)
        production_item.formula.insert(raw_material2)
        operation.input.insert(production_item)

        operation_row_id = self.db.save(operation)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        production_item = self.db.load(oks.ITEM, row_id=production_item_row_id)
        raw_material = self.db.load(oks.ITEM, row_id=raw_material_row_id)
        raw_material2 = self.db.load(oks.ITEM, row_id=raw_material2_row_id)
        self.assertEquals(production_item.quantity, 13.0)
        self.assertEquals(raw_material.quantity, 90.398248271072276)
        self.assertEquals(raw_material2.quantity, 128.3997080451787)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        production_item = self.db.load(oks.ITEM, row_id=production_item_row_id)
        raw_material = self.db.load(oks.ITEM, row_id=raw_material_row_id)
        raw_material2 = self.db.load(oks.ITEM, row_id=raw_material2_row_id)
        self.assertEquals(production_item.quantity, 3.0)
        self.assertEquals(raw_material.quantity, 100.0)
        self.assertEquals(raw_material2.quantity, 130.0)

        operation = self.db.load(oks.OPERATION, row_id=operation_row_id)
        production_itemRowIter = operation.input.get_iter_first()
        production_item = operation.input.get_object(production_itemRowIter)
        componentRowIter = production_item.formula.get_iter_first()
        production_item.formula.delete(componentRowIter)
        production_item.formula.update_components()
        operation.input.update(production_item, production_itemRowIter)
        operation_row_id = self.db.save(operation)

        self.db.toggle_status(oks.OPERATION, operation_row_id)

        production_item = self.db.load(oks.ITEM, row_id=production_item_row_id)
        raw_material = self.db.load(oks.ITEM, row_id=raw_material_row_id)
        raw_material2 = self.db.load(oks.ITEM, row_id=raw_material2_row_id)
        self.assertEquals(production_item.quantity, 13.0)
        self.assertEquals(raw_material.quantity, 100.0)
        self.assertEquals(raw_material2.quantity, 118.79795631625099)