def quotation_id(number=None): if not session.get('logged_in'): return redirect('/') logging.info('go url /quotation/%s', number) profile = get_profile_from_session() ddao = QuotationDAO() if not ddao.exist(ddao.where('number', number)): logging.info('redirect if quotation doesnt exist number: %s', number) return redirect('/quotation') quotation = ddao.get(ddao.where('number', number))[0] logging.info( 'display pdf_template_quotation.html with quotation number: %s', number) return render_template('template/pdf_template_quotation.html', profile=profile, convert_date=convert_date, quotation=quotation, url="quotation")
class QuotationTestCase(unittest.TestCase): def setUp(self): self.qdao = QuotationDAO(DB_PATH) self.quotation = Quotation() self.quotation.client = "TEST 1" self.quotation.date_sent = "01/01/2020" self.quotation.date_validity = "01/01/2021" self.quotation.end_text = "TEST 2\nTEST 3\nTEST 4" self.quotation.id_profile = 1 self.quotation.number = 230 self.quotation.total = 2030.20 self.quotation.tax_price = 55.10 def test_quotation_obj(self): self.assertIsNotNone(self.qdao, msg="Impossible to instance QuotationDAO") self.assertTrue(self.qdao.create_table(), msg="Impossible to create devis table in db") self.assertFalse(self.qdao.exist(self.quotation), msg="Impossible to check Quotation exist in db") self.assertTrue(self.qdao.insert(self.quotation), msg="Impossible to insert Quotation in db") list_quotation = self.qdao.get( self.qdao.where('number', self.quotation.number)) self.assertIsInstance(list_quotation, list, msg="dao.get function not return a list") self.assertGreater(len(list_quotation), 0, msg="No Quotation in db") quota = list_quotation[0] self.assertIsInstance( quota, Quotation, msg="1st element of dao.get is not a Quotation obj") self.assertEqual(self.quotation.client, quota.client, msg="Quotation get, has no same attribute 'client'") self.assertEqual( self.quotation.date_sent, quota.date_sent, msg="Quotation get, has no same attribute 'date_sent'") self.assertEqual( self.quotation.date_validity, quota.date_validity, msg="Quotation get, has no same attribute 'date_validity'") self.assertEqual(self.quotation.end_text, quota.end_text, msg="Quotation get, has no same attribute 'end_text'") self.assertEqual( self.quotation.id_profile, quota.id_profile, msg="Quotation get, has no same attribute 'id_profile'") self.assertEqual(self.quotation.number, quota.number, msg="Quotation get, has no same attribute 'number'") self.assertEqual(self.quotation.total, quota.total, msg="Quotation get, has no same attribute 'total'") self.assertEqual( self.quotation.tax_price, quota.tax_price, msg="Quotation get, has no same attribute 'tax_price'") self.assertTrue(hasattr(quota, 'id'), msg="Quotation get, has no attribute 'id'") quota.end_text = "TEST 1\nTEST 2\nTEST3" self.assertTrue(self.qdao.update(quota)) list_quotation2 = self.qdao.get(self.qdao.where( 'number', quota.number)) self.assertIsInstance(list_quotation2, list, msg="dao.get function not return a list 2") self.assertGreater(len(list_quotation2), 0, msg="No Quotation 2 in db") quota2 = list_quotation2[0] self.assertEqual( quota2.end_text, quota.end_text, msg="Quotation get 2, has no same attribute 'end_text'") self.assertTrue(self.qdao.delete(quota), msg="Impossible to delete devis from db") self.assertFalse(self.qdao.drop(True, False), msg="Drop table devis not wanted") self.assertFalse(self.qdao.drop(False, True), msg="Drop table devis not wanted") self.assertTrue(self.qdao.drop(True, True), msg="Cannot drop table devis") self.assertFalse(self.qdao.drop(True, True), msg="The table has not deleted before")
def add_quotation(form): profileSession = get_profile_from_session() if profileSession.id: id_profile = profileSession.id else: logging.warning('(Quotation) Session closed: %s', profileSession.id) flash(_("Impossible to add Quotation, Your session has been expired"), 'danger') return ddao = QuotationDAO() n_quotation = form['quotation'] if ddao.exist(ddao.where('number', n_quotation)): logging.info('quotation exist with number: %s', n_quotation) flash( _("Impossible to add Quotation, the number of quotation is ever used" ), 'danger') return client = form['client'] date_sent = form['date_sent'] date_validity = form['date_validity'] tax = (form['tax'] == "true") lines = [(x.replace('lines[', '').replace('][', '-').replace(']', ''), dict(form)[x]) for x in dict(form) if x.startswith('lines[')] list_text = [ dict(form)[x] for x in dict(form) if x.startswith('text_end[') ] quotation_obj = Quotation() quotation_obj.client = client quotation_obj.date_sent = date_sent quotation_obj.date_validity = date_validity quotation_obj.number = n_quotation quotation_obj.tax_price = 0 quotation_obj.id_profile = id_profile quotation_obj.end_text = '\n'.join(list_text) didao = QuotationItemDAO() success = True nb_items = int(len(lines) / 3) list_quotation_item = list() for i in range(0, nb_items): quotationItem = QuotationItem() quotationItem.description = lines[(i * 3) + 0][1] quotationItem.quantity_text = lines[(i * 3) + 1][1] result = re.findall(r'[-+]?\d*\.\d+|^\d+', quotationItem.quantity_text) if len(result) == 0: result = [0] quotationItem.quantity = float(result[0]) uprice = lines[(i * 3) + 2][1] if not uprice: uprice = 0 quotationItem.unit_price = float(uprice) quotationItem.reduction = False list_quotation_item.append(quotationItem) quotation_obj.total += (quotationItem.quantity * quotationItem.unit_price) if tax: quotation_obj.tax_price += ( (quotationItem.quantity * quotationItem.unit_price) * 20 / 100) if not ddao.insert(quotation_obj): logging.info('add quotation %s FAILED', n_quotation) flash( _("Impossible to add quotation n°%1").replace('%1', n_quotation), 'danger') return else: logging.info('add quotation %s OK', n_quotation) for quotationItem in list_quotation_item: quotationItem.id_quotation = quotation_obj.id success &= didao.insert(quotationItem) if not success: logging.warning('add quotation item %s FAILED', n_quotation) didao.delete(didao.where('id_quotation', n_quotation)) ddao.delete(ddao.where('id', n_quotation)) flash( _("Impossible to add quotation n°%1").replace('%1', n_quotation), 'danger') else: logging.info('add quotation item %s OK', n_quotation) flash( _("The quotation n°%1 has been added successfull").replace( '%1', n_quotation), 'success')