mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-28 15:42:25 +00:00
[Printer] Abstract print instance + acl mixin for printer app
This commit is contained in:
parent
bab1ca8f66
commit
4b530750f4
1 changed files with 89 additions and 68 deletions
|
@ -18,7 +18,7 @@ from django.forms import ValidationError
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.template.defaultfilters import filesizeformat
|
from django.template.defaultfilters import filesizeformat
|
||||||
|
|
||||||
from re2o.mixins import RevMixin
|
from re2o.mixins import RevMixin, AclMixin
|
||||||
|
|
||||||
import users.models
|
import users.models
|
||||||
|
|
||||||
|
@ -74,8 +74,20 @@ class Digicode(RevMixin, models.Model):
|
||||||
digicode.save()
|
digicode.save()
|
||||||
return (str(code) + '#')
|
return (str(code) + '#')
|
||||||
|
|
||||||
|
class PrintOperation(RevMixin, AclMixin, models.Model):
|
||||||
|
"""Abstract printing operation"""
|
||||||
|
user = models.ForeignKey('users.User', on_delete=models.PROTECT)
|
||||||
|
|
||||||
class JobWithOptions(RevMixin, models.Model):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
if user_request.has_perm('printer.change_printoperation'):
|
||||||
|
return True, None
|
||||||
|
elif user_request == self.user:
|
||||||
|
return True, None
|
||||||
|
else:
|
||||||
|
return False, _("This is not your print operation task")
|
||||||
|
|
||||||
|
|
||||||
|
class JobWithOptions(RevMixin, AclMixin, models.Model):
|
||||||
"""
|
"""
|
||||||
This is the main model of printer application :
|
This is the main model of printer application :
|
||||||
|
|
||||||
|
@ -109,38 +121,86 @@ class JobWithOptions(RevMixin, models.Model):
|
||||||
```_update_price``` update printing price
|
```_update_price``` update printing price
|
||||||
"""
|
"""
|
||||||
STATUS_AVAILABLE = (
|
STATUS_AVAILABLE = (
|
||||||
('Pending', 'Pending'),
|
('Pending', _('Pending')),
|
||||||
('Printable', 'Printable'),
|
('Printable', _('Printable')),
|
||||||
('Running', 'Running'),
|
('Running', _('Running')),
|
||||||
('Cancelled', 'Cancelled'),
|
('Cancelled', _('Cancelled')),
|
||||||
('Finished', 'Finished')
|
('Finished', _('Finished'))
|
||||||
)
|
)
|
||||||
user = models.ForeignKey('users.User', on_delete=models.PROTECT)
|
user = models.ForeignKey('users.User', on_delete=models.PROTECT)
|
||||||
|
print_operation = models.ForeignKey('PrintOperation', on_delete=models.CASCADE)
|
||||||
paid = models.BooleanField(default='False')
|
paid = models.BooleanField(default='False')
|
||||||
file = models.FileField(storage=FileSystemStorage(location='/var/impressions'),
|
file = models.FileField(
|
||||||
|
storage=FileSystemStorage(location='/var/impressions'),
|
||||||
upload_to=user_printing_path,
|
upload_to=user_printing_path,
|
||||||
validators=[FileValidator(
|
validators=[FileValidator(
|
||||||
allowed_types=ALLOWED_TYPES,
|
allowed_types=ALLOWED_TYPES,
|
||||||
max_size=MAX_PRINTFILE_SIZE)
|
max_size=MAX_PRINTFILE_SIZE)
|
||||||
])
|
],
|
||||||
filename = models.CharField(max_length=255,null=True)
|
verbose_name=_('File')
|
||||||
|
)
|
||||||
|
filename = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
null=True,
|
||||||
|
verbose_name=_('File Name')
|
||||||
|
)
|
||||||
starttime = models.DateTimeField(auto_now_add=True)
|
starttime = models.DateTimeField(auto_now_add=True)
|
||||||
endtime = models.DateTimeField(null=True)
|
endtime = models.DateTimeField(null=True)
|
||||||
status = models.CharField(max_length=255, choices=STATUS_AVAILABLE)
|
status = models.CharField(
|
||||||
printAs = models.ForeignKey('users.User', on_delete=models.PROTECT, related_name='print_as_user', blank=True, null=True)
|
max_length=255,
|
||||||
|
choices=STATUS_AVAILABLE,
|
||||||
|
verbose_name=_('Status'),
|
||||||
|
default='Pending'
|
||||||
|
)
|
||||||
|
printAs = models.ForeignKey(
|
||||||
|
'users.User',
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
related_name='print_as_user',
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
verbose_name=_('Print as')
|
||||||
|
)
|
||||||
price = models.DecimalField(
|
price = models.DecimalField(
|
||||||
max_digits=5,
|
max_digits=5,
|
||||||
decimal_places=2,
|
decimal_places=2,
|
||||||
verbose_name=_("price"),
|
verbose_name=_("Price"),
|
||||||
default=0.0)
|
default=0.0
|
||||||
|
)
|
||||||
pages = models.IntegerField(default=0)
|
pages = models.IntegerField(default=0)
|
||||||
|
format = models.CharField(
|
||||||
format = models.CharField(max_length=255, choices=FORMAT_AVAILABLE, default='A4')
|
max_length=255,
|
||||||
color = models.CharField(max_length=255, choices=COLOR_CHOICES, default='Greyscale')
|
choices=FORMAT_AVAILABLE,
|
||||||
disposition = models.CharField(max_length=255, choices=DISPOSITIONS_AVAILABLE, default='TwoSided')
|
default='A4',
|
||||||
count = models.PositiveIntegerField(default=1)
|
verbose_name=_("Format")
|
||||||
stapling = models.CharField(max_length=255, choices=STAPLING_OPTIONS, default='None')
|
)
|
||||||
perforation = models.CharField(max_length=255, choices=PERFORATION_OPTIONS, default='None')
|
color = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
choices=COLOR_CHOICES,
|
||||||
|
default='Greyscale',
|
||||||
|
verbose_name=_("Color")
|
||||||
|
)
|
||||||
|
disposition = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
choices=DISPOSITIONS_AVAILABLE,
|
||||||
|
default='TwoSided',
|
||||||
|
verbose_name=_("Disposition")
|
||||||
|
)
|
||||||
|
count = models.PositiveIntegerField(
|
||||||
|
default=1,
|
||||||
|
verbose_name=_("Count")
|
||||||
|
)
|
||||||
|
stapling = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
choices=STAPLING_OPTIONS,
|
||||||
|
default='None',
|
||||||
|
verbose_name=_("Stapling")
|
||||||
|
)
|
||||||
|
perforation = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
choices=PERFORATION_OPTIONS,
|
||||||
|
default='None',
|
||||||
|
verbose_name=_("Perforation")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _update_price(self):
|
def _update_price(self):
|
||||||
|
@ -172,48 +232,9 @@ class JobWithOptions(RevMixin, models.Model):
|
||||||
|
|
||||||
total_price = math.floor(self.count * (price_ink + price_stapling))
|
total_price = math.floor(self.count * (price_ink + price_stapling))
|
||||||
|
|
||||||
return float(total_price)/100
|
return total_price/100
|
||||||
|
|
||||||
@staticmethod
|
def save(self, *args, **kwargs):
|
||||||
def can_view_all(user_request, *_args, **_kwargs):
|
self._update_price()
|
||||||
"""
|
super(JobWithOptions, self).save(*args, **kwargs)
|
||||||
"""
|
|
||||||
return (
|
|
||||||
True, None
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def can_create(user_request, *_args, **_kwargs):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
return(
|
|
||||||
True, None
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def can_view(user_request, *_args, **_kwargs):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
return(
|
|
||||||
True, None
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def can_edit(user_request, *_args, **_kwargs):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
return(
|
|
||||||
True, None
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def can_delete(user_request, *_args, **_kwargs):
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
return(
|
|
||||||
True, None
|
|
||||||
)
|
|
||||||
|
|
Loading…
Reference in a new issue