Added orders and prices apps
This commit is contained in:
parent
f699fed511
commit
5d36dbd02d
2
TODO.md
2
TODO.md
|
@ -41,3 +41,5 @@ Remember that, as always with QuerySets, any subsequent chained methods which im
|
||||||
* profile select_related vs prefetch_related
|
* profile select_related vs prefetch_related
|
||||||
|
|
||||||
* use HTTP OPTIONS instead of configuration endpoint, or rename to settings?
|
* use HTTP OPTIONS instead of configuration endpoint, or rename to settings?
|
||||||
|
|
||||||
|
* Log changes from rest api (serialized objects)
|
||||||
|
|
|
@ -50,6 +50,12 @@ def get_accounts():
|
||||||
tokens = reverse('admin:authtoken_token_changelist')
|
tokens = reverse('admin:authtoken_token_changelist')
|
||||||
users.append(items.MenuItem(_("Tokens"), tokens))
|
users.append(items.MenuItem(_("Tokens"), tokens))
|
||||||
accounts.append(items.MenuItem(_("Users"), url, children=users))
|
accounts.append(items.MenuItem(_("Users"), url, children=users))
|
||||||
|
if isinstalled('orchestra.apps.prices'):
|
||||||
|
url = reverse('admin:prices_price_changelist')
|
||||||
|
accounts.append(items.MenuItem(_("Prices"), url))
|
||||||
|
if isinstalled('orchestra.apps.orders'):
|
||||||
|
url = reverse('admin:orders_order_changelist')
|
||||||
|
accounts.append(items.MenuItem(_("Orders"), url))
|
||||||
return accounts
|
return accounts
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
Orders
|
|
||||||
======
|
|
||||||
|
|
||||||
Build an asyclic graph with every `model.save()` and `model.delete()` looking for Service.content_type matches.
|
|
||||||
|
|
||||||
`ORDERS_GRAPH_MAX_DEPTH`
|
|
||||||
|
|
||||||
autodiscover contacts by looking for `contact` atribute on related objects with reverse relationship `null=False`
|
|
15
orchestra/apps/orders/admin.py
Normal file
15
orchestra/apps/orders/admin.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
from .models import Order, QuotaStorage
|
||||||
|
|
||||||
|
|
||||||
|
class OrderAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class QuotaStorageAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(Order, OrderAdmin)
|
||||||
|
admin.site.register(QuotaStorage, QuotaStorageAdmin)
|
|
@ -1,29 +0,0 @@
|
||||||
from . import settings
|
|
||||||
|
|
||||||
|
|
||||||
class Node(object):
|
|
||||||
def __init__(self, content):
|
|
||||||
self.content = content
|
|
||||||
self.parents = []
|
|
||||||
self.path = []
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "%s:%s" % (type(self.content).__name__, self.content)
|
|
||||||
|
|
||||||
|
|
||||||
class Collector(object):
|
|
||||||
def __init__(self, obj, cascade_only=False):
|
|
||||||
self.obj = obj
|
|
||||||
self.cascade_only = cascade_only
|
|
||||||
|
|
||||||
def collect(self):
|
|
||||||
depth = settings.ORDERS_COLLECTOR_MAX_DEPTH
|
|
||||||
return self._rec_collect(self.obj, [self.obj], depth)
|
|
||||||
|
|
||||||
def _rec_collect(self, obj, path, depth):
|
|
||||||
node = Node(content=obj)
|
|
||||||
# FK lookups
|
|
||||||
for field in obj._meta.fields:
|
|
||||||
if hasattr(field, 'related') and (self.cascade_only or not field.null):
|
|
||||||
related_object = getattr(obj, field.name)
|
|
||||||
|
|
|
@ -1,36 +1,35 @@
|
||||||
|
from django.db import models
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db import models
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.translation import ugettext as _
|
|
||||||
|
|
||||||
from . import settings
|
from . import settings
|
||||||
|
|
||||||
|
|
||||||
class Service(models.Model):
|
|
||||||
name = models.CharField(_("name"), max_length=256)
|
|
||||||
content_type = models.ForeignKey(ContentType, verbose_name=_("content_type"))
|
|
||||||
match = models.CharField(_("expression"), max_length=256)
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Order(models.Model):
|
class Order(models.Model):
|
||||||
contact = models.ForeignKey(settings.ORDERS_CONTACT_MODEL,
|
account = models.ForeignKey('accounts.Account', verbose_name=_("account"),
|
||||||
verbose_name=_("contact"), related_name='orders')
|
related_name='orders')
|
||||||
content_type = models.ForeignKey(ContentType)
|
content_type = models.ForeignKey(ContentType)
|
||||||
object_id = models.PositiveIntegerField(null=True)
|
object_id = models.PositiveIntegerField(null=True)
|
||||||
service = models.ForeignKey(Service, verbose_name=_("service"),
|
price = models.ForeignKey(settings.ORDERS_PRICE_MODEL,
|
||||||
related_name='orders'))
|
verbose_name=_("price"), related_name='orders')
|
||||||
registered_on = models.DateTimeField(_("registered on"), auto_now_add=True)
|
registered_on = models.DateTimeField(_("registered on"), auto_now_add=True)
|
||||||
canceled_on = models.DateTimeField(_("canceled on"), null=True, blank=True)
|
cancelled_on = models.DateTimeField(_("cancelled on"), null=True, blank=True)
|
||||||
last_billed_on = models.DateTimeField(_("last billed on"), null=True, blank=True)
|
billed_on = models.DateTimeField(_("billed on"), null=True, blank=True)
|
||||||
billed_until = models.DateTimeField(_("billed until"), null=True, blank=True)
|
billed_until = models.DateTimeField(_("billed until"), null=True, blank=True)
|
||||||
ignore = models.BooleanField(_("ignore"), default=False)
|
ignore = models.BooleanField(_("ignore"), default=False)
|
||||||
description = models.CharField(_("description"), max_length=256, blank=True)
|
description = models.TextField(_("description"), blank=True)
|
||||||
|
|
||||||
content_object = generic.GenericForeignKey()
|
content_object = generic.GenericForeignKey()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "%s@%s" (self.service, self.contact)
|
return self.service
|
||||||
|
|
||||||
|
|
||||||
|
class QuotaStorage(models.Model):
|
||||||
|
order = models.ForeignKey(Order, verbose_name=_("order"))
|
||||||
|
value = models.BigIntegerField(_("value"))
|
||||||
|
date = models.DateTimeField(_("date"))
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.order
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
ORDERS_CONTACT_MODEL = getattr(settings, 'ORDERS_CONTACT_MODEL', 'contacts.Contact')
|
ORDERS_PRICE_MODEL = getattr(settings, 'ORDERS_PRICE_MODEL', 'prices.Price')
|
||||||
|
|
||||||
|
|
||||||
ORDERS_COLLECTOR_MAX_DEPTH = getattr(settings, 'ORDERS_COLLECTOR_MAX_DEPTH', 3)
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class Root(models.Model):
|
|
||||||
name = models.CharField(max_length=256, default='randomname')
|
|
||||||
|
|
||||||
|
|
||||||
class Related(models.Model):
|
|
||||||
root = models.ForeignKey(Root)
|
|
||||||
|
|
||||||
|
|
||||||
class TwoRelated(models.Model):
|
|
||||||
related = models.ForeignKey(Related)
|
|
||||||
|
|
||||||
|
|
||||||
class ThreeRelated(models.Model):
|
|
||||||
twolated = models.ForeignKey(TwoRelated)
|
|
||||||
|
|
||||||
|
|
||||||
class FourRelated(models.Model):
|
|
||||||
threerelated = models.ForeignKey(ThreeRelated)
|
|
|
@ -1,28 +0,0 @@
|
||||||
from django.conf import settings
|
|
||||||
from django.core.management import call_command
|
|
||||||
from django.db.models import loading
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from .models import Root, Related, TwoRelated, ThreeRelated, FourRelated
|
|
||||||
|
|
||||||
|
|
||||||
#class CollectorTests(TestCase):
|
|
||||||
# def setUp(self):
|
|
||||||
# self.root = Root.objects.create(name='randomname')
|
|
||||||
# self.related = Related.objects.create(top=self.root)
|
|
||||||
#
|
|
||||||
# def _pre_setup(self):
|
|
||||||
# # Add the models to the db.
|
|
||||||
# self._original_installed_apps = list(settings.INSTALLED_APPS)
|
|
||||||
# settings.INSTALLED_APPS += ('orchestra.apps.orders.tests',)
|
|
||||||
# loading.cache.loaded = False
|
|
||||||
# call_command('syncdb', interactive=False, verbosity=0)
|
|
||||||
# super(CollectorTests, self)._pre_setup()
|
|
||||||
#
|
|
||||||
# def _post_teardown(self):
|
|
||||||
# super(CollectorTests, self)._post_teardown()
|
|
||||||
# settings.INSTALLED_APPS = self._original_installed_apps
|
|
||||||
# loading.cache.loaded = False
|
|
||||||
|
|
||||||
# def test_models(self):
|
|
||||||
# self.assertEqual('randomname', self.root.name)
|
|
23
orchestra/apps/prices/admin.py
Normal file
23
orchestra/apps/prices/admin.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
from orchestra.core import services
|
||||||
|
|
||||||
|
from .models import Pack, Price, Rate
|
||||||
|
|
||||||
|
|
||||||
|
class RateInline(admin.TabularInline):
|
||||||
|
model = Rate
|
||||||
|
|
||||||
|
|
||||||
|
class PriceAdmin(admin.ModelAdmin):
|
||||||
|
inlines = [RateInline]
|
||||||
|
|
||||||
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
||||||
|
""" Improve performance of account field and filter by account """
|
||||||
|
if db_field.name == 'service':
|
||||||
|
models = [model._meta.model_name for model in services.get().keys()]
|
||||||
|
kwargs['queryset'] = db_field.rel.to.objects.filter(model__in=models)
|
||||||
|
return super(PriceAdmin, self).formfield_for_dbfield(db_field, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(Price, PriceAdmin)
|
42
orchestra/apps/prices/models.py
Normal file
42
orchestra/apps/prices/models.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from . import settings
|
||||||
|
|
||||||
|
|
||||||
|
class Pack(models.Model):
|
||||||
|
account = models.ForeignKey('accounts.Account', verbose_name=_("account"),
|
||||||
|
related_name='packs')
|
||||||
|
name = models.CharField(_("pack"), max_length=128,
|
||||||
|
choices=settings.PRICES_PACKS,
|
||||||
|
default=settings.PRICES_DEFAULT_PACK)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.pack
|
||||||
|
|
||||||
|
|
||||||
|
class Price(models.Model):
|
||||||
|
description = models.CharField(_("description"), max_length=256, unique=True)
|
||||||
|
service = models.ForeignKey(ContentType, verbose_name=_("service"))
|
||||||
|
expression = models.CharField(_("match"), max_length=256)
|
||||||
|
tax = models.IntegerField(_("tax"), choices=settings.PRICES_TAXES,
|
||||||
|
default=settings.PRICES_DEFAUL_TAX)
|
||||||
|
active = models.BooleanField(_("is active"), default=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.description
|
||||||
|
|
||||||
|
|
||||||
|
class Rate(models.Model):
|
||||||
|
price = models.ForeignKey('prices.Price', verbose_name=_("price"))
|
||||||
|
pack = models.CharField(_("pack"), max_length=128, blank=True,
|
||||||
|
choices=(('', _("default")),) + settings.PRICES_PACKS)
|
||||||
|
quantity = models.PositiveIntegerField(_("quantity"), null=True, blank=True)
|
||||||
|
value = models.DecimalField(_("price"), max_digits=12, decimal_places=2)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = ('price', 'pack', 'quantity')
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.price
|
19
orchestra/apps/prices/settings.py
Normal file
19
orchestra/apps/prices/settings.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from django.conf import settings
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
PRICES_PACKS = getattr(settings, 'PRICES_PACKS', (
|
||||||
|
('basic', _("Basic")),
|
||||||
|
('advanced', _("Advanced")),
|
||||||
|
))
|
||||||
|
|
||||||
|
PRICES_DEFAULT_PACK = getattr(settings, 'PRICES_DEFAULT_PACK', 'basic')
|
||||||
|
|
||||||
|
|
||||||
|
PRICES_TAXES = getattr(settings, 'PRICES_TAXES', (
|
||||||
|
(0, _("Duty free")),
|
||||||
|
(7, _("7%")),
|
||||||
|
(21, _("21%")),
|
||||||
|
))
|
||||||
|
|
||||||
|
PRICES_DEFAUL_TAX = getattr(settings, 'PRICES_DFAULT_TAX', 0)
|
|
@ -76,6 +76,8 @@ INSTALLED_APPS = (
|
||||||
'orchestra.apps.databases',
|
'orchestra.apps.databases',
|
||||||
'orchestra.apps.vps',
|
'orchestra.apps.vps',
|
||||||
'orchestra.apps.issues',
|
'orchestra.apps.issues',
|
||||||
|
'orchestra.apps.prices',
|
||||||
|
'orchestra.apps.orders',
|
||||||
|
|
||||||
# Third-party apps
|
# Third-party apps
|
||||||
'south',
|
'south',
|
||||||
|
@ -136,6 +138,8 @@ FLUENT_DASHBOARD_APP_GROUPS = (
|
||||||
'orchestra.apps.accounts.models.Account',
|
'orchestra.apps.accounts.models.Account',
|
||||||
'orchestra.apps.contacts.models.Contact',
|
'orchestra.apps.contacts.models.Contact',
|
||||||
'orchestra.apps.users.models.User',
|
'orchestra.apps.users.models.User',
|
||||||
|
'orchestra.apps.orders.models.Order',
|
||||||
|
'orchestra.apps.prices.models.Price',
|
||||||
),
|
),
|
||||||
'collapsible': True,
|
'collapsible': True,
|
||||||
}),
|
}),
|
||||||
|
@ -167,6 +171,8 @@ FLUENT_DASHBOARD_APP_ICONS = {
|
||||||
# Accounts
|
# Accounts
|
||||||
'accounts/account': 'Face-monkey.png',
|
'accounts/account': 'Face-monkey.png',
|
||||||
'contacts/contact': 'contact.png',
|
'contacts/contact': 'contact.png',
|
||||||
|
'orders/order': 'shopping-cart.png',
|
||||||
|
'prices/price': 'price.png',
|
||||||
# Administration
|
# Administration
|
||||||
'users/user': 'Mr-potato.png',
|
'users/user': 'Mr-potato.png',
|
||||||
'djcelery/taskstate': 'taskstate.png',
|
'djcelery/taskstate': 'taskstate.png',
|
||||||
|
|
BIN
orchestra/static/orchestra/icons/price.png
Normal file
BIN
orchestra/static/orchestra/icons/price.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
104
orchestra/static/orchestra/icons/price.svg
Normal file
104
orchestra/static/orchestra/icons/price.svg
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="Your_Icon"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 48 48"
|
||||||
|
enable-background="new 0 0 100 100"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="0.48.3.1 r9886"
|
||||||
|
sodipodi:docname="price.svg"
|
||||||
|
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/price.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90"><metadata
|
||||||
|
id="metadata11"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs9"><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3785"
|
||||||
|
x="-0.13714286"
|
||||||
|
width="1.2742857"
|
||||||
|
y="-0.96000003"
|
||||||
|
height="2.9200001"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="1.7378048"
|
||||||
|
id="feGaussianBlur3787" /></filter><radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient2305"
|
||||||
|
id="radialGradient2311"
|
||||||
|
cx="-6"
|
||||||
|
cy="37.75"
|
||||||
|
fx="-6"
|
||||||
|
fy="37.75"
|
||||||
|
r="14"
|
||||||
|
gradientTransform="matrix(1,0,0,0.267857,0,27.63839)"
|
||||||
|
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient2305"><stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop2307" /><stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop2309" /></linearGradient><radialGradient
|
||||||
|
r="14"
|
||||||
|
fy="37.75"
|
||||||
|
fx="-6"
|
||||||
|
cy="37.75"
|
||||||
|
cx="-6"
|
||||||
|
gradientTransform="matrix(1,0,0,0.267857,0,27.63839)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient3043"
|
||||||
|
xlink:href="#linearGradient2305"
|
||||||
|
inkscape:collect="always" /></defs><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1024"
|
||||||
|
id="namedview7"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="6.675088"
|
||||||
|
inkscape:cx="15.760113"
|
||||||
|
inkscape:cy="22.890176"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="Your_Icon" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="opacity:0.48453608;color:#000000;fill:url(#radialGradient3043);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
id="path2303"
|
||||||
|
sodipodi:cx="-6"
|
||||||
|
sodipodi:cy="37.75"
|
||||||
|
sodipodi:rx="14"
|
||||||
|
sodipodi:ry="3.75"
|
||||||
|
d="m 8,37.75 a 14,3.75 0 1 1 -28,0 14,3.75 0 1 1 28,0 z"
|
||||||
|
transform="matrix(1.535714,0,0,1.51296,29.034195,-15.256481)" /><g
|
||||||
|
id="g3"
|
||||||
|
style="fill:#555753"
|
||||||
|
transform="matrix(0.56980085,-0.08926081,0.08926081,0.56980085,-7.4328135,-0.07503521)">
|
||||||
|
<path
|
||||||
|
d="m 92.489,14.705 c -0.77,-0.39 -1.696,-0.084 -2.085,0.679 -3.969,7.806 -7.123,7.317 -12.35,6.521 -3.248,-0.497 -7.289,-1.114 -12.139,0.37 -2.586,0.793 -4.882,2.757 -6.768,4.938 L 55.141,23.209 H 41.976 l -35.102,35.1 26.33,26.327 35.1,-35.098 V 36.371 l -6.948,-6.95 c 1.616,-1.921 3.495,-3.571 5.471,-4.178 4.172,-1.282 7.678,-0.745 10.76,-0.273 5.456,0.837 10.602,1.625 15.581,-8.181 0.388,-0.763 0.084,-1.696 -0.679,-2.084 M 45.114,52.634 c -0.743,-0.849 -2.128,-2.458 -4.824,-3.618 -2.424,-1.038 -3.673,-0.294 -4.118,0.755 -0.519,1.196 0.44,2.575 3.15,5.113 3.778,3.479 4.655,6.287 3.198,9.687 -1.431,3.325 -4.963,5.166 -9.566,4.036 l -1.654,3.848 -3.693,-1.588 1.521,-3.551 c -2.46,-1.185 -4.578,-2.939 -5.666,-4.334 l 2.998,-3.88 c 1.202,1.524 3.067,3.256 5.495,4.302 2.168,0.924 3.996,0.694 4.62,-0.763 0.612,-1.423 -0.206,-2.828 -2.601,-4.967 -3.423,-3.057 -5.349,-6.096 -3.793,-9.72 1.424,-3.325 4.849,-4.909 9.163,-3.938 l 1.521,-3.551 3.659,1.569 -1.404,3.286 c 2.43,1.136 3.872,2.417 4.926,3.574 l -2.932,3.74 z M 59.529,31.98 c 2.422,2.425 2.422,6.357 0,8.778 -1.215,1.209 -2.799,1.815 -4.387,1.815 -1.588,0 -3.178,-0.606 -4.388,-1.819 -2.423,-2.419 -2.423,-6.35 0,-8.775 1.21,-1.211 2.798,-1.813 4.383,-1.813 0.538,0 1.074,0.094 1.6,0.232 -0.703,1.054 -1.297,2.058 -1.768,2.903 -0.76,0.04 -1.479,0.33 -2.021,0.872 -0.588,0.585 -0.909,1.364 -0.909,2.194 0,0.832 0.321,1.606 0.903,2.193 0.591,0.589 1.369,0.91 2.199,0.91 0.831,0 1.606,-0.321 2.193,-0.91 0.586,-0.581 0.91,-1.362 0.91,-2.19 0,-0.594 -0.219,-1.136 -0.528,-1.623 0.485,-0.87 1.075,-1.839 1.743,-2.828 0.019,0.026 0.047,0.042 0.07,0.061"
|
||||||
|
id="path5"
|
||||||
|
style="fill:#555753"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5 KiB |
BIN
orchestra/static/orchestra/icons/shopping-cart.png
Normal file
BIN
orchestra/static/orchestra/icons/shopping-cart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
283
orchestra/static/orchestra/icons/shopping-cart.svg
Normal file
283
orchestra/static/orchestra/icons/shopping-cart.svg
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.3.1 r9886"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
sodipodi:docname="shopping-cart.png"
|
||||||
|
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/shopping-cart.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<metadata
|
||||||
|
id="metadata8">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1024"
|
||||||
|
id="namedview4"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="6.5442039"
|
||||||
|
inkscape:cx="52.394878"
|
||||||
|
inkscape:cy="17.224989"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<image
|
||||||
|
width="43.169491"
|
||||||
|
height="40.771187"
|
||||||
|
xlink:href="data:image/png;base64,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
|
||||||
|
df2cpwv8X/lnXhgg25xNAAAAAElFTkSuQmCC
|
||||||
|
"
|
||||||
|
id="image10"
|
||||||
|
x="3.4576273"
|
||||||
|
y="4.9067798" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 18 KiB |
Loading…
Reference in a new issue