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)
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)
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)
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)
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)
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)
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()
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)
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)
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)
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)
def testBlankCompanyName(self): """ Blank names for companies should raise an error """ company = Company(name="") self.assertRaises(oks.InvalidNameError, self.db.save, company)
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)