Zliczanie ilości produktu w/g zadanych dat [Zamknięte]

To pytanie zostało zamknięte z powodu: niezwiązane z tematem lub nieaktualne

przez
Dr.One
na 13.01.2016 21:43:46

Witam szanowne grono,

Ponieważ pcham do przodu tę moją "Odookację" a może raczej powinienem nazwać to nieudolnymi próbami nauki mam pytanie

otóż, nie mogę sobie poradzić z wyliczaniem miesięcy:

dni i tygodnie (ilość dni i ilość tygodni) liczę tak:

from openerp.osv import fields
from openerp.osv import osv
import time
import datetime
from datetime import datetime
from datetime import timedelta
from dateutil import relativedelta
from dateutil.relativedelta import relativedelta
from openerp.tools import (DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT)
from openerp.exceptions import except_orm, Warning, RedirectWarning
now = lambda *a: time.strftime('%Y-%m-%d %H:%M:%S')
curmon = lambda *a: time.strftime('%Y %m %d')
server_date = DEFAULT_SERVER_DATE_FORMAT
server_datetime = DEFAULT_SERVER_DATETIME_FORMAT

class stock_check(osv.osv):
    _name = 'stock.check'

    def _get_def_loc(self, cr, uid, context=None):
        dest_loc = self.pool.get('stock.location').search(cr, uid, [('usage', '=', 'production')], context=context)
        dest_loc_obj = self.pool.get('stock.location').browse(cr, uid, dest_loc[0])
        return dest_loc_obj.id

    def _days_between(self, cr, uid, ids, field_name, arg, context=None):
        res = {}
        for cur_data in self.browse(cr, uid, ids, context=context):
            st_date = datetime.strptime(cur_data.st_date, "%Y-%m-%d")
            en_date = datetime.strptime(cur_data.en_date, "%Y-%m-%d")
            res[cur_data.id] = abs((en_date - st_date).days)
        return res

    def _weeks_between(self, cr, uid, ids, field_name, arg, context=None):
        res = {}
        for cur_data in self.browse(cr, uid, ids, context=context):
            st_date = datetime.strptime(cur_data.st_date, "%Y-%m-%d")
            en_date = datetime.strptime(cur_data.en_date, "%Y-%m-%d")
            week_day1 = (st_date - timedelta(days=st_date.weekday()))
            week_day2 = (en_date - timedelta(days=en_date.weekday()))
            res[cur_data.id] = (week_day2 - week_day1).days / 7
        return res

#Jeśli tak nie zadziała to jak mam to zrobić ??

    def _months_between(self, cr, uid, ids, field_name, arg, context=None):
        for cur_data in self.browse(cr, uid, ids, context=context):
        print 'START','st_date'
        print 'END  ','en_date'
        date1 = datetime.strptime(cur_data.st_date, '%Y-%m-%d')
        date2 = datetime.strptime(cur_data.en_date, '%Y-%m-%d')
        r = relativedelta.relativedelta(date2, date1)
        r.months
        print 'Months = ',r.months
        return r.months

    _columns = {
            'product': fields.one2many('product.data','check_id', string="Product"),
            'location_id': fields.many2one('stock.location','location'),
            'st_date': fields.date('Start date'),
            'en_date': fields.date('End date'),
            'wr_date': fields.char('Date'),
            'nod': fields.function(_days_between, type='integer', string='NoD'),
            'now': fields.function(_weeks_between, type='integer', string='NoW'),
            'nom': fields.function(_months_between, type='integer', string='NoM'),
            }

    _defaults = {
        'st_date': lambda *a: time.strftime('%Y-%m-%d'),
        'en_date': lambda *a: time.strftime('%Y-%m-%d'),
        'location_id': _get_def_loc,
        }

...... 'st_date' i 'en_date' pojawia się komunikat o nieodpowiednim formacie daty ..... w kolejnej odsłonie pojawia się komunikat: relativedelta has no attribute relativedelta ....

W kolejnym kroku, chciałbym dodać podział na tygodnie i zliczać tygodniami, a może powinienem zrobić to od razu ?

czyli każdy z produktów zliczać sprzedaż w ciągu każdego z nich, wyszczególniając także najniższą sprzedaż i najwyższą w każdym tygodniu :)

Zapytacie po co to wszystko ..... dla ułatwienia :)

Wiele z tych opcji dostępne/możliwe jest w Odoo ale droga do uzyskania tych informacji jest nie szczególnie prostą. Np jeśli chcemy dowiedzieć się ile danego produktu sprzedaliśmy w określonym okresie czasu a nie prowadzimy sprzedaży w oparciu o Odoo, nie prowadzimy też zakupów w oparciu o Odoo to utworzenie kont analitycznych możliwe będzie w oparciu o co ?

W przyszłości może tak, kidy zaczniemy (może używać nieco szerzej Odoo) ale w tej fazie, kiedy korzystamy jedynie z magazynu (wydania w postaci przesunięcia produktów na produkcję, nawet zmiany ilości odbywają się na bazie "UPDATE" ilości w lokalizacji a nie przyjęcia/zakupu), wiadomości i chata bo tylko tyle potrzebujemy .... ?

Dlatego na szybko, buduję modul który będzie zbierał te informacje, zliczał ilości produktów i tworzył szybką prostą analizę ile i kiedy zostało sprzedane w zasadzie w oparciu o trzy kliknięcia  (data początkowa, data końcowa bang!) i mamy listę z interesującymi informacjami.

W sumie zastanawiam się dlaczego takich mechanizmów nie ma w Odoo, to już 9 wersji przecież a tak wiele można by wciąż zmienić, dodać, poprawić :) Przynajmniej w moim przypadku. 

Dr.One
Dr.One
341
| 5 3 5
Data pytania 22.12.2015, 10:43
0
głos
507 Odsłony

A skąd się wzięło i czym jest w ostatniej metodzie 'st_date' i 'en_data'? - z tego, co widzę to są zwykłe napisy a nie zmienne.

Dariusz Żbikowski
na 24.12.2015, 11:10

Zrób to analogicznie jak masz w _days_between

Dariusz Żbikowski
na 29.12.2015, 11:18

Coś takiego jak tabelka poniżej (niefortunnie, nie mamy mozliwości pokazać tabelki ... jeszcze ... więc sobie wyobraźmy)

___________________________________________________________________________________

| produkt                 |      tydzień1      |     tydzień2     |     tydzień3     |     tydzień4     |     TOTAL     |
| produkt 1              |           12          |         10          |            7          |           0          |        29         |
| produkt 2              |           1            |           4          |           8           |           3          |         16        |
| produkt 3              |           0            |            2         |          10          |           1          |         13        |

Sprawa prosta jeśli piszesz skrypt np w PHP, tu jednak z uwagi na pewne ograniczenia ..... wynikające pewnie z mojej niewiedzy i może także nieznajomości PYTHON'a .... trochę utrudniają budowanie takich tabelek. A może nie ?

Da się coś takiego zrobić czy wszystkio jest na "sztywno" ?
 

Dr.One
Dr.One
341
| 5 3 5
Data odpowiedzi 29.12.2015, 13:42
0
głos

Twoja odpowiedź

Spróbuj dać znacząca odpowiedź. Jeśli chcesz wypowiedzieć się na temat pytania lub odpowiedzi, po prostu użyj narzędzia komentowania. Proszę pamiętać, że zawsze można zrewidować swoją odpowiedź - nie ma potrzeby odpowiadać na to samo pytanie dwa razy. Także prosimy, nie zapomnij zagłosować - to naprawdę pomaga wybrać najlepsze pytania i odpowiedzi!

Zadaj Pytanie

Bądź na bieżąco

O tym forum

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.

Przeczytaj wytyczne

Narzędzia do pytań

4 obserwujący

Statystyki

Spytał/a: 22.12.2015, 10:43
Oglądano: 507 razy
Ostatnia aktualizacja: 13.01.2016, 21:43