17:45 pm

PragetX

PPP

Implemented the functionality of Downloading Bill as PDF. Bill is converted from html template directly to pdf and saved in media.

  
 
class OrderDownloadApi(ModelViewSet):
 
serializer_class = OrderViewSerializer
 
def get_queryset(self, request):
 
queryset = Order.objects.all()
 
return queryset
    @swagger_auto_schema(
        operation_description="Download Bill",
    )
    def download_bill(self, request, *args, **kwargs):
        order_obj = Order.objects.get(id=kwargs.get("id"))
        data = self.get_serializer(order_obj).data
 
        discount_amount = 0
        for index, product in enumerate(data["order_products"]):
            product_obj = Product.objects.get(id=product["product"]["id"])
            product_price_obj = ProductPrice.objects.filter(
                product=product_obj, is_active=True
            ).first()
            if product_price_obj:
                discount_amount += product_price_obj.discount_price * product["quantity"]
                data["order_products"][index][
                    "discount_price"
                ] = product_price_obj.discount_price
            else:
                discount_amount += product["product"]["price"] * product["quantity"]
                data["order_products"][index]["discount_price"] = product["product"][
                    "price"
                ]
            data["order_products"][index]["amount"] = (
                product["quantity"] * data["order_products"][index]["discount_price"]
            )
        data["amount"] = discount_amount
 
        template_path = "PPP-bill-code.html"
 
        context = {"data": data}
 
        pdf = render_to_pdf(template_path, context)
        return HttpResponse(pdf, content_type="application/pdf")

Render to PDF is implemented by xhtml2pdf

def render_to_pdf(template_src, context_dict={}):
    template = get_template(template_src)
    html = template.render(context_dict)
    result = BytesIO()
    pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result)
    if not pdf.err:
        return result.getvalue()
    return None

PragetX

SSL Certificate installation for PragetX main NEXTjs server

##  
# You should look at the following URL's in order to grasp a solid understanding  
# of Nginx configuration files in order to fully unleash the power of Nginx.  
# [https://www.nginx.com/resources/wiki/start/](https://www.nginx.com/resources/wiki/start/)  
# [https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/](https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)  
# [https://wiki.debian.org/Nginx/DirectoryStructure](https://wiki.debian.org/Nginx/DirectoryStructure)  
#  
# In most cases, administrators will remove this file from sites-enabled/ and  
# leave it as reference inside of sites-available where it will continue to be  
# updated by the nginx packaging team.  
#  
# This file will automatically load configuration files provided by other  
# applications, such as Drupal or Wordpress. These applications will be made  
# available underneath a path with that package name, such as /drupal8.  
#  
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.  
##  
  
# Default server configuration  
#  
server {  
  
# SSL configuration  
#  
# listen 443 ssl default_server;  
# listen [::]:443 ssl default_server;  
#  
# Note: You should disable gzip for SSL traffic.  
# See: [https://bugs.debian.org/773332](https://bugs.debian.org/773332)  
#  
# Read up on ssl_ciphers to ensure a secure configuration.  
# See: [https://bugs.debian.org/765782](https://bugs.debian.org/765782)  
#  
# Self signed certs generated by the ssl-cert package  
# Don't use them in a production server!  
#  
# include snippets/snakeoil.conf;  
  
# root /var/www/html;  
  
# Add index.php to the list if you are using PHP  
# index index.html index.htm index.nginx-debian.html;  
  
server_name pragetx.com www.pragetx.com _;  
client_max_body_size 30M;  
  
location / {  
proxy_pass [http://localhost:3000;](http://localhost:3000;/)  
        proxy_http_version 1.1;  
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection 'upgrade';  
        proxy_set_header Host $host;  
proxy_cache_bypass $http_upgrade;  
# First attempt to serve request as file, then  
# as directory, then fall back to displaying a 404.  
# try_files $uri $uri/ =404;  
}  
  
# pass PHP scripts to FastCGI server  
#  
#location ~ \.php$ {  
# include snippets/fastcgi-php.conf;  
#  
# # With php-fpm (or other unix sockets):  
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;  
# # With php-cgi (or other tcp sockets):  
# fastcgi_pass 127.0.0.1:9000;  
#}  
  
# deny access to .htaccess files, if Apache's document root  
# concurs with nginx's one  
#  
#location ~ /\.ht {  
# deny all;  
#}  
  
    listen 443 ssl; # managed by Certbot  
    ssl_certificate /etc/letsencrypt/live/pragetx.com/fullchain.pem; # managed by Certbot  
    ssl_certificate_key /etc/letsencrypt/live/pragetx.com/privkey.pem; # managed by Certbot  
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot  
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot  
  
  
}  
  
  
# Virtual Host configuration for example.com  
#  
# You can move that to a different file under sites-available/ and symlink that  
# to sites-enabled/ to enable it.  
#  
#server {  
# listen 80;  
# listen [::]:80;  
#  
# server_name example.com;  
#  
# root /var/www/example.com;  
# index index.html;  
#  
# location / {  
# try_files $uri $uri/ =404;  
# }  
#}  
  
server {  
#    if ($host = www.pragetx.com) {  
 #       return 301 [https://$host$request_uri;](https://$host$request_uri;/)  
  #  } # managed by Certbot  
  
  
   # if ($host = pragetx.com) {  
    #    return 301 [https://$host$request_uri;](https://$host$request_uri;/)  
    #} # managed by Certb  
  
listen 80;  
  
server_name pragetx.com www.pragetx.com _;  
return 301 [https://pragetx.com$request_uri;](https://pragetx.com$request_uri;/)  
    return 404; # managed by Certbot  
  
  
  
}

OTP

Using msg91

<<Yesterday Tomorrow>>


Links : Tags : Year : 2024 Month : March 24, March Date : 15th March, Friday, 2024, 15th March Category : Daily