示例#1
0
 def _set_cfop_default(self, store, param_name, description, code):
     from stoqlib.domain.fiscal import CfopData
     if self.has_object(param_name):
         return
     data = self.get_object(store, param_name)
     if not data:
         data = CfopData(code=code, description=description, store=store)
         self.set_object(store, param_name, data)
示例#2
0
 def _create_cfop(self, key, description, code):
     from stoqlib.domain.fiscal import CfopData
     if self.get_parameter_by_field(key, CfopData):
         return
     data = self.store.find(CfopData, code=code).one()
     if not data:
         store = new_store()
         data = CfopData(code=code, description=description,
                         store=store)
     store.commit(close=True)
     self._set_schema(key, data.id)
示例#3
0
 def _set_cfop_default(self, store, param_name, description, code):
     from stoqlib.domain.fiscal import CfopData
     if self.has_object(param_name):
         return
     data = self.get_object(store, param_name)
     if not data:
         # There is no unique code constraint in the cfop_data table!
         data = store.find(CfopData, code=code).any()
         if data is None:
             data = CfopData(code=code, description=description,
                             store=store)
         self.set_object(store, param_name, data)
示例#4
0
 def test_getclient_sales(self):
     client = self.store.find(Client)
     assert not client.is_empty()
     client = client[0]
     CfopData(code=u'123', description=u'bla', store=self.store)
     branches = self.store.find(Branch)
     assert not branches.is_empty()
     people = self.store.find(SalesPerson)
     assert not people.is_empty()
     count_sales = client.get_client_sales().count()
     sale = self.create_sale()
     sale.client = client
     products = self.store.find(Product)
     assert not products.is_empty()
     product = products[0]
     sale.add_sellable(product.sellable)
     one_more_sale = client.get_client_sales().count()
     self.assertEquals(count_sales + 1, one_more_sale)
示例#5
0
def apply_patch(store):
    # Creation of new column in stock_decrease table.
    # And added new Cfop to cfop_data table.
    store.execute("""ALTER TABLE stock_decrease
                   ADD COLUMN cfop_id bigint REFERENCES cfop_data(id);""")

    # Default Cfop should be use in manual stock decrease.
    cfop_data = store.find(CfopData, code=u'5.949').one()
    if not cfop_data:
        cfop_data = CfopData(store=store,
                             code=u"5.949",
                             description=u"Outra saída de mercadoria ou "
                             u"prestação de serviço não "
                             u"especificado")

    # Adjusting existing manuals outputs
    for stock_decrease in store.find(StockDecrease):
        stock_decrease.cfop = cfop_data

    retentions = store.execute("""
        SELECT id, quantity, reason, retention_date, product_id, cfop_id
          FROM product_retention_history ORDER BY id;""").get_all()

    # Without retentions, there is no need to create user and employee
    # variables.
    if len(retentions):

        # Default user for migration
        user = get_admin_user(store)
        if user is None:
            users = Person.iselectBy(IUser, is_active=True,
                                     store=store).order_by(Person.id)
            user = users[0]

        # Default employee for migration
        employee = IEmployee(user.person, None)
        if employee is None:
            employees = Person.iselectBy(IEmployee,
                                         is_active=True,
                                         store=store).order_by(Person.id)
            employee = employees[0]

        default_branch = sysparam().MAIN_COMPANY
        notes = _(u"Stock decrease imported from old retention.")

    history = store.execute("""
        SELECT id, quantity_retained, sellable_id, branch_id
          FROM product_history
         WHERE quantity_retained is not null
          ORDER BY id;""").get_all()

    for i in range(len(retentions)):
        ret = retentions[i]
        hist = history[i]

        product = Product.get(ret[4], store=store)

        branch_id = hist[3]
        if ret[1] != hist[1] or product.sellable.id != hist[2]:
            branch_id = default_branch.id

        decrease = StockDecrease(store=store,
                                 confirm_date=ret[3],
                                 status=StockDecrease.STATUS_CONFIRMED,
                                 reason=ret[2],
                                 notes=notes,
                                 responsible=user,
                                 removed_by=employee,
                                 branch_id=branch_id,
                                 cfop_id=ret[5])

        decrease_item = StockDecreaseItem(store=store,
                                          quantity=ret[1],
                                          sellable=product.sellable)
        decrease.add_item(decrease_item)
        store.remove(hist[0])
        ProductHistory(branch_id=branch_id,
                       sellable=product.sellable,
                       quantity_decreased=decrease_item.quantity,
                       decreased_date=decrease.confirm_date,
                       store=store)

    store.execute("""ALTER TABLE product_history
                   DROP COLUMN quantity_retained;""")
    store.execute("DROP TABLE product_retention_history;")
示例#6
0
 def testGetDescription(self):
     cfop = CfopData(code=u"2365", description=u"blabla", store=self.store)
     full_desc = cfop.get_description()
     self.assertEqual(full_desc, u"%s %s" % (u"2365", u"blabla"))
示例#7
0
 def create_cfop_data(self):
     from stoqlib.domain.fiscal import CfopData
     return CfopData(store=self.store, code=u'123', description=u'test')
示例#8
0
 def create_model(self, store):
     return CfopData(code=u"", description=u"",
                     store=store)