Commit 965e5a1b authored by Kitof's avatar Kitof Committed by Romain Bignon

Add shopoob application and new property in shop capability

parent e835e61d
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
# vim: ft=python et softtabstop=4 cinoptions=4 shiftwidth=4 ts=4 ai
# Copyright(C) 2012 Fourcot Florent
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.applications.shopoob import Shopoob
if __name__ == '__main__':
Shopoob.run()
# -*- coding: utf-8 -*-
# Copyright(C) 2011 Laurent Bachelier
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from .shopoob import Shopoob
__all__ = ['Shopoob']
# -*- coding: utf-8 -*-
# Copyright(C) 2012-2013 Florent Fourcot
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
from decimal import Decimal
from weboob.capabilities.base import empty
from weboob.capabilities.shop import CapShop, Order, Payment, Item
from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import PrettyFormatter, IFormatter
from weboob.tools.application.base import MoreResultsAvailable
from weboob.core import CallErrors
__all__ = ['Shopoob']
class OrdersFormatter(IFormatter):
MANDATORY_FIELDS = ('id', 'date', 'discount', 'shipping', 'tax', 'total')
def start_format(self, **kwargs):
self.output('%sId Date Discount Shipping Tax Total ' % ((' ' * 15) if not self.interactive else ''))
self.output('-------------%s+------------+----------+----------+----------+----------' % (('-' * 15) if not self.interactive else ''))
def format_obj(self, obj, alias):
date = obj.date.strftime('%Y-%m-%d') if not empty(obj.date) else ''
discount = obj.discount or Decimal('0')
shipping = obj.shipping or Decimal('0')
tax = obj.tax or Decimal('0')
total = obj.total or Decimal('0')
result = u'%s %s %s %s %s %s' % (self.colored('%-28s' % obj.fullid, 'yellow'),
self.colored('%-10s' % date, 'blue'),
self.colored('%9.2f' % discount, 'green'),
self.colored('%9.2f' % shipping, 'green'),
self.colored('%9.2f' % tax, 'green'),
self.colored('%9.2f' % total, 'green'))
return result
def flush(self):
self.output(u'-------------%s+------------+----------+----------+----------+----------' % (('-' * 15) if not self.interactive else ''))
class ItemsFormatter(IFormatter):
MANDATORY_FIELDS = ('label', 'url', 'price')
def start_format(self, **kwargs):
self.output(' Label Url Price ')
self.output('---------------------------------------------------------------------------+---------------------------------------------+----------')
def format_obj(self, obj, alias):
price = obj.price or Decimal('0')
result = u'%s %s %s' % (self.colored('%-75s' % obj.label[:75], 'yellow'),
self.colored('%-43s' % obj.url, 'magenta'),
self.colored('%9.2f' % price, 'green'))
return result
def flush(self):
self.output(u'---------------------------------------------------------------------------+---------------------------------------------+----------')
class PaymentsFormatter(IFormatter):
MANDATORY_FIELDS = ('date', 'method', 'amount')
def start_format(self, **kwargs):
self.output(' Date Method Amount ')
self.output('-----------+-----------------+----------')
def format_obj(self, obj, alias):
date = obj.date.strftime('%Y-%m-%d') if not empty(obj.date) else ''
amount = obj.amount or Decimal('0')
result = u'%s %s %s' % (self.colored('%-10s' % date, 'blue'),
self.colored('%-17s' % obj.method, 'yellow'),
self.colored('%9.2f' % amount, 'green'))
return result
def flush(self):
self.output(u'-----------+-----------------+----------')
class Shopoob(ReplApplication):
APPNAME = 'shopoob'
VERSION = '1.1'
COPYRIGHT = 'Copyright(C) 2015 Christophe Lampin'
DESCRIPTION = 'Console application to obtain details and status of e-commerce orders.'
SHORT_DESCRIPTION = "obtain details and status of e-commerce orders"
CAPS = CapShop
COLLECTION_OBJECTS = (Order, )
EXTRA_FORMATTERS = {'orders': OrdersFormatter,
'items': ItemsFormatter,
'payments': PaymentsFormatter
}
DEFAULT_FORMATTER = 'table'
COMMANDS_FORMATTERS = {'orders': 'orders',
'items': 'items',
'payments': 'payments',
'ls': 'orders',
}
def main(self, argv):
self.load_config()
return ReplApplication.main(self, argv)
@defaultcount(10)
def do_orders(self, line):
"""
orders
List all orders.
"""
self.start_format()
for order in self.do('iter_orders'):
self.format(order)
def do_items(self, id):
"""
items [ID]
Get items of orders.
If no ID given, display all details of all backends.
"""
l = []
id, backend_name = self.parse_id(id)
if not id:
for order in self.get_object_list('iter_orders'):
l.append((order.id, order.backend))
else:
l.append((id, backend_name))
for id, backend in l:
names = (backend,) if backend is not None else None
# XXX: should be generated by backend? -Flo
# XXX: no, but you should do it in a specific formatter -romain
# TODO: do it, and use exec_method here. Code is obsolete
mysum = Item()
mysum.label = u"Sum"
mysum.url = u"Generated by shopoob"
mysum.price = Decimal("0.")
self.start_format()
for item in self.do('iter_items', id, backends=names):
self.format(item)
mysum.price = item.price + mysum.price
self.format(mysum)
def do_payments(self, id):
"""
payments [ID]
Get payments of orders.
If no ID given, display payment of all backends.
"""
self.start_format()
for payment in self.do('iter_payments', id):
self.format(payment)
......@@ -43,6 +43,7 @@ class Order(BaseObject):
shipping = DecimalField('Shipping price')
discount = DecimalField('Discounts')
tax = DecimalField('Tax')
total = DecimalField('Total')
def __repr__(self):
return u"<Order id=%r date=%r>" % (self.id, self.date)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment