def collections_main(request): user = getSowarStockUser(request.user) if user.type == "admin": collections = models.Collection.objects.all() return render( request, "ssw/admin/collections_main.html", { "user": getSowarStockUser(request.user), "collections": collections, "activeDashboardMenu": "collections", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def order_details(request, order_no): order = get_object_or_404(models.Order, order_no=order_no) user = getSowarStockUser(request.user) if user.type == "admin": return render( request, "ssw/admin/order_details.html", { "user": getSowarStockUser(request.user), "order": order, "activeDashboardMenu": "orders", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def site_settings_main(request): user = getSowarStockUser(request.user) if user.type == "admin": settings = models.SiteSettings.objects.get(pk=1) form = forms.SiteSettingsForm(instance=settings) if request.method == "POST": form = forms.SiteSettingsForm(request.POST, request.FILES, instance=settings) if form.is_valid(): form.save() messages.success(request, "Settings updated successfully") else: messages.error( request, "An error occurred while trying to save the settings") return render( request, "ssw/admin/site_settings_main.html", { "user": user, "activeDashboardMenu": "site_settings", "settings": settings, "form": form, **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def product_reject(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": if request.method == "POST": product = get_object_or_404(models.Product, pk=pk) rejection_reason = request.POST["rejection_reason"] rejection_note = request.POST["rejection_note"] product.status = "rejected" product.rejection_reason = rejection_reason product.rejection_note = rejection_note product.reviewed_by = user product.save() email_body = loader.render_to_string( "ssw/email_product_reject.html", {"product": product}) send_mail("رفض عملك {}".format(product.public_id), "", "Sowarstock", [product.owner.email], False, None, None, None, email_body) notify.send( request.user, recipient=product.owner, level="error", verb= 'Product {} has been rejected for the following reason: {}, {}' .format(product.public_id, rejection_reason, rejection_note)) messages.success(request, "Product has been rejected") models.ActivityLog.objects.create( short_description="admin %s rejected product %s" % (user, product), owner=user) return HttpResponseRedirect("/admin/products") return HttpResponseRedirect("/admin/products") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def requests_approve(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": r = get_object_or_404(models.UserRequest, pk=pk) r.status = "approved" r.save() if r.type == "new_contributor": r.owner.photo_id_verified = True r.owner.save() notify.send(request.user, recipient=r.owner, level="success", verb=_('Your account has been verified')) email_body = loader.render_to_string( "ssw/email_account_verified.html", {"user": r.owner}) send_mail("تهانينا. تم توثيق حسابك. ابدأ الآن", "", "Sowarstock", [r.owner.email], False, None, None, None, email_body) models.ActivityLog.objects.create( short_description="admin %s approved user request %s" % (user, r), owner=user) messages.success(request, "Request has been approved") return HttpResponseRedirect("/admin/requests") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def product_approve(request, pk): user = getSowarStockUser(request.user) if user.type == "image_reviewer": product = get_object_or_404(models.Product, pk=pk) product.status = "approved" product.reviewed_by = user product.save() email_body = loader.render_to_string("ssw/email_product_accept.html", {"product": product}) send_mail("قبول عملك {}".format(product.public_id), "", "Sowarstock", [product.owner.email], False, None, None, None, email_body) notify.send(user, recipient=product.owner, level="success", verb='Product {} has been approved'.format( product.public_id)) admin = models.SowarStockUser.objects.filter(type="admin") notify.send(request.user, recipient=admin, level="success", verb='Product {} has been approved by {}'.format( product.public_id, user.get_full_name())) messages.success(request, "Product has been approved") models.ActivityLog.objects.create( short_description="image reviewer %s approved product %s" % (user, product), owner=user) return HttpResponseRedirect("/reviewer/products") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def products_main(request): user = getSowarStockUser(request.user) if user.type == "admin": pending = models.Product.objects.filter(status="pending_approval") pending_admin = models.Product.objects.filter( status='pending_admin_approval') approved = models.Product.objects.filter(status="approved") rejected = models.Product.objects.filter(status="rejected") requested_to_archive = models.Product.objects.filter( requested_to_archive=True) archived = models.Product.objects.filter(status="archived") return render( request, "ssw/admin/products_main.html", { "user": user, "pending": pending, "pending_admin": pending_admin, "approved": approved, "rejected": rejected, "requested_to_archive": requested_to_archive, "archived": archived, "activeDashboardMenu": "products", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def featured_contributor_edit(request): user = getSowarStockUser(request.user) if user.type == "admin": contributors = models.Contributor.objects.filter(suspended=False) verified_contributors = list() for contributor in contributors: if contributor.is_verified(): verified_contributors.append(contributor) if request.method == "POST": for contributor in verified_contributors: contributor.featured = False contributor.save() cs = request.POST.getlist("contributors") if cs: for contributor in cs: c = get_object_or_404(models.Contributor, pk=contributor) c.featured = True c.save() messages.success( request, "Featured contributors list updated successfully") return HttpResponseRedirect("/admin/featured") return render( request, "ssw/admin/featured_contributor_edit.html", { "user": user, "contributors": verified_contributors, **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def notifications_new(request): user = getSowarStockUser(request.user) if user.type == "admin": form = forms.NotificationForm() if request.method == "POST": recipients_type = request.POST.getlist("recipients")[0] if recipients_type == "contributors": recipients = models.SowarStockUser.objects.filter( type="contributor") elif recipients_type == "clients": recipients = models.SowarStockUser.objects.filter( type="client") else: recipients = request.POST.getlist("recipient") level = request.POST["level"] verb = request.POST["verb"] for r in recipients: user = get_object_or_404(models.SowarStockUser, pk=r) notify.send(request.user, recipient=user, level=level, verb=verb) messages.success(request, "Notification sent") return HttpResponseRedirect("/admin/notices") return render( request, "ssw/admin/notifications_new.html", { "user": user, "form": form, "activeDashboardMenu": "notifications", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def featured_product_edit(request): user = getSowarStockUser(request.user) if user.type == "admin": products = models.Product.objects.filter(status="approved") if request.method == "POST": for product in products: product.featured = False product.save() ps = request.POST.getlist("products") if ps: for product in ps: p = get_object_or_404(models.Product, pk=product) p.featured = True p.save() messages.success(request, "Featured products list updated successfully") return HttpResponseRedirect("/admin/featured") return render(request, "ssw/admin/featured_product_edit.html", { "user": user, "products": products, **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def payment_new(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": earning = get_object_or_404(models.Earning, pk=pk) form = forms.PaymentForm() if request.method == "POST": form = forms.PaymentForm(request.POST, request.FILES) if form.is_valid(): payment = form.save(commit=False) payment.amount = earning.amount payment.earning = earning payment.save() messages.success(request, "Payment has been successfully made") # notify contributor and send email email_body = loader.render_to_string( "ssw/email_new_payment.html", {"payment": payment}) send_mail("عملية دفع جديدة لك", "", "Sowarstock", [payment.contributor.email], False, None, None, None, email_body) notify.send(request.user, recipient=payment.contributor, level="success", verb=_('You got paid ${}').format(payment.amount)) return HttpResponseRedirect("/fadmin/earnings") return render( request, "ssw/admin/payment_new.html", { "user": user, "earning": earning, "form": form, **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def collections_edit(request, pk): collection = get_object_or_404(models.Collection, pk=pk) user = getSowarStockUser(request.user) if user.type == "admin": if user == collection.owner: products = models.Product.objects.filter(status="approved") else: products = models.Product.objects.filter(owner=collection.owner, status="approved") if request.method == "POST": title = request.POST["title"] description = request.POST["description"] products_pks = request.POST.getlist("products") if title == "": messages.error(request, "Please choose a title for your collection") return HttpResponseRedirect( "/admin/collections/{}/edit".format(collection.pk)) if description == "": messages.error( request, "Please choose a description for your collection") return HttpResponseRedirect( "/admin/collections/{}/edit".format(collection.pk)) if not products_pks: messages.error(request, "Please select at least one product") return HttpResponseRedirect( "/admin/collections/{}/edit".format(collection.pk)) collection.title = title collection.description = description collection.products.clear() for product in products_pks: p = get_object_or_404(models.Product, pk=product) collection.products.add(p) collection.save() messages.success(request, "Collection updated successfully") return HttpResponseRedirect("/admin/collections") return render( request, "ssw/admin/collections_new.html", { "user": getSowarStockUser(request.user), "products": products, "collection": collection, "activeDashboardMenu": "collections", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def reviews_delete(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": review = get_object_or_404(models.Review, pk=pk) review.delete() messages.success(request, "Review has been deleted") return HttpResponseRedirect("/admin/reviews") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def faqs_delete(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": faq = get_object_or_404(models.Faq, pk=pk) faq.delete() messages.success(request, "FAQ has been deleted") return HttpResponseRedirect("/admin/faqs") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def collections_delete(request, pk): collection = get_object_or_404(models.Collection, pk=pk) user = getSowarStockUser(request.user) if user.type == "admin": collection.delete() messages.success(request, "Collection deleted") return HttpResponseRedirect("/admin/collections") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def search_keyword_synonyms_delete(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": synonym = get_object_or_404(models.SearchKeywordSynonyms, pk=pk) synonym.delete() messages.success(request, "Word synonyms deleted successfully") return HttpResponseRedirect("/admin/search-keywords") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def subcategories_delete(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": subcategory = get_object_or_404(models.SubCategory, pk=pk) subcategory.delete() messages.success(request, "Subcategory deleted") return HttpResponseRedirect("/admin/categories") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def pending_requests_count(request): if request.user.is_authenticated: user = getSowarStockUser(request.user) if user.type == "admin": count = models.UserRequest.objects.filter( status="pending_approval").count() return JsonResponse({"result": "success", "count": count}) else: return JsonResponse({"result": "error", "msg": "no admin"}) else: return JsonResponse({"result": "error", "msg": "no user"})
def pending_faqs_count(request): if request.user.is_authenticated: user = getSowarStockUser(request.user) if user.type == "admin": count = models.FaqPersonal.objects.filter( replier__isnull=True).count() return JsonResponse({"result": "success", "count": count}) else: return JsonResponse({"result": "error", "msg": "no admin"}) else: return JsonResponse({"result": "error", "msg": "no user"})
def unsuspend_account(request, username): user = getSowarStockUser(request.user) account = get_object_or_404(models.SowarStockUser, username=username) if user.type == "admin": account.suspended = False account.suspension_reason = None account.save() messages.success(request, "Account un-suspended") return HttpResponseRedirect("/admin/users") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def product_archive(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": product = get_object_or_404(models.Product, pk=pk) product.status = "archived" product.requested_to_archive = False product.save() messages.success(request, "Product has been archived") return HttpResponseRedirect("/admin/products") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def subcategories_new(request): user = getSowarStockUser(request.user) if user.type == "admin": form = forms.SubcategoryForm() if request.method == "POST": form = forms.SubcategoryForm(request.POST) if form.is_valid(): form.save() messages.success(request, "Subcategory updated") else: messages.error(request, "An error has occurred") return HttpResponseRedirect("/admin/categories") return render( request, "ssw/admin/subcategories_new.html", { "user": getSowarStockUser(request.user), "form": form, "activeDashboardMenu": "categories", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def notifications_main(request): user = getSowarStockUser(request.user) if user.type == "admin": notifications = request.user.notifications.all() return render( request, "ssw/admin/notifications_main.html", { "user": user, "notifications": notifications, "activeDashboardMenu": "notifications", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def legal_main(request): user = getSowarStockUser(request.user) if user.type == "admin": documents = models.LegalDocument.objects.all() return render( request, "ssw/admin/legal_main.html", { "user": user, "documents": documents, "activeDashboardMenu": "legal", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def product_delete(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": product = get_object_or_404(models.Product, pk=pk) models.ActivityLog.objects.create( short_description="admin %s deleted product %s" % (user, product), owner=user) delete_product_image(product) product.delete() messages.success(request, "Product has been deleted") return HttpResponseRedirect("/admin/products") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def reviews_undread_to_read(request): user = getSowarStockUser(request.user) if user.type == "contributor": reviews = models.Review.objects.filter(product__owner=user, read_by_product_owner=False) for review in reviews: review.read_by_product_owner = True review.save() elif user.type == "admin": reviews = models.Review.objects.filter(read_by_admin=False) for review in reviews: review.read_by_admin = True review.save() return JsonResponse({"result": "success"})
def users(request): user = getSowarStockUser(request.user) if user.type == "admin" or user.type == "customer_rep": users = models.SowarStockUser.objects.all() return render( request, "ssw/admin/users.html", { "user": user, "users": users, "activeDashboardMenu": "users", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def faqs_edit(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": faq = get_object_or_404(models.Faq, pk=pk) form = forms.FaqForm(instance=faq) if request.method == "POST": form = forms.FaqForm(request.POST, instance=faq) if form.is_valid(): form.save() messages.success(request, "FAQ has been edit") else: messages.error(request, "FAQ has been added") return HttpResponseRedirect("/admin/faqs") return render( request, "ssw/admin/faqs_new.html", { "user": getSowarStockUser(request.user), "faq": faq, "form": form, "activeDashboardMenu": "faqs", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def personal_faqs_reply(request, pk): user = getSowarStockUser(request.user) if user.type == "admin": if request.method == "POST": faq = get_object_or_404(models.FaqPersonal, pk=pk) user = get_object_or_404(models.SowarStockUser, pk=request.user.pk) answer = request.POST['answer'] faq.answer = answer faq.replier = user faq.save() messages.success(request, "FAQ has been answered") return HttpResponseRedirect("/admin/faqs") else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")
def payment_new(request): user = getSowarStockUser(request.user) if user.type == "financial_admin": form = forms.PaymentForm() if request.method == "POST": form = forms.PaymentForm(request.POST, request.FILES) if form.is_valid(): payment = form.save(commit=False) try: earnings = models.Earning.objects.filter( type="contributor", payment=None, contributor=payment.contributor) owed = earnings.aggregate(Sum('amount')) owed_amount = round(owed['amount__sum'], 2) except: owed_amount = 0 payment.amount = owed_amount payment.save() for earning in earnings: earning.payment = payment earning.save() messages.success(request, "Payment has been successfully made") # notify contributor and send email email_body = loader.render_to_string( "ssw/email_new_payment.html", {"payment": payment}) send_mail("عملية دفع جديدة لك", "", "Sowarstock", [payment.contributor.email], False, None, None, None, email_body) notify.send(request.user, recipient=payment.contributor, level="success", verb='You got paid ${}'.format(payment.amount)) return HttpResponseRedirect("/fadmin/earnings") return render( request, "ssw/fadmin/payment_new.html", { "user": user, "form": form, "activeDashboardMenu": "earnings", **showCorrectMenu(request.user) }) else: messages.error(request, "You are not authorized to view this page !") return HttpResponseRedirect("/")