예제 #1
0
    def test_constructor(self):
        with self.assertRaisesRegexp(TypeError,
                                     'You must provide a sellable argument'):
            StockDecreaseItem(store=self.store)

        with self.assertRaisesRegexp(TypeError,
                                     'You must provide a sellable argument'):
            StockDecreaseItem(store=self.store, sellable=None)
        item = self.create_stock_decrease_item()
        self.assertIsNotNone(item.icms_info)
        self.assertIsNotNone(item.ipi_info)
예제 #2
0
 def create_stock_decrease_item(self, stock_decrease=None):
     from stoqlib.domain.stockdecrease import StockDecreaseItem
     return StockDecreaseItem(stock_decrease=stock_decrease
                              or self.create_stock_decrease(),
                              sellable=self.create_sellable(),
                              quantity=1,
                              store=self.store)
예제 #3
0
    def test_add_item(self):
        decrease = self.create_stock_decrease()
        sellable = self.create_sellable()

        item = StockDecreaseItem(store=self.store, sellable=sellable)
        self.assertEquals(item.stock_decrease, None)
        decrease.add_item(item)
        self.assertEquals(item.stock_decrease, decrease)
예제 #4
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;")