Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
Zliczanie ilości produktu w/g zadanych dat [Zamknięte]
- Pytanie został zamknięty z powodu: niezwiązane z tematem lub nieaktualne
przezWitam 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.
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" ?
Bądź na bieżąco
O tym forum
Narzędzia do pytań
Statystyki
Spytał/a: 22.12.2015, 10:43 |
Oglądano: 1355 razy |
Ostatnia aktualizacja: 29.12.2015, 14:17 |
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.