from django.shortcuts import render
from django.contrib.auth import authenticate
from django.shortcuts import redirect
from .models import *
from django.views.decorators.csrf import csrf_protect
import datetime
from django.utils import timezone
from django.contrib.auth import authenticate,logout,login
from django.contrib.auth.models import User, auth
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.core.mail import EmailMultiAlternatives
from .forms import *
import os
from django.template.loader import render_to_string, get_template
import uuid,random
from django.core.mail import send_mail
from django.shortcuts import render, redirect, HttpResponse,HttpResponseRedirect
from django.http import Http404, HttpResponseRedirect
from django.conf import settings
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
#pdf
from xhtml2pdf import pisa
from io import BytesIO
from xhtml2pdf.config.httpconfig import httpConfig
from django.db.models import Q

from django.http import FileResponse
import io
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import letter
#
from .serializers import *
from rest_framework.generics import ListAPIView
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
import html
from .resources import SiteModelProductDetailReource
from tablib import Dataset
import qrcode
from django_xhtml2pdf.utils import generate_pdf
import pandas as pd
from html2excel import ExcelParser
from django.core.paginator import Paginator
from django.db import transaction
from django.db.models import F, Value, CharField, Func

from openpyxl import Workbook
from openpyxl.styles import Alignment
from django.db.models import Q
from django.db.models import Max

UserModel = get_user_model() 

# Create your views here.
#@login_required(login_url='/builder/login')

def excelfile(request, self, name):
    folder_path = settings.FILE_STORAGE_PATH
    content_type_value = 'text/plain'
    file_path = os.path.join(self.folder_path, self.name)
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fh:
            response = HttpResponse(
                fh.read(),
                content_type=self.content_type_value
            )
            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
        return response
    else:
        raise Http404
    messages.info(request,'Download Success File')
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    
    
def pdf_report_service(request):
    #try:
        pid = request.GET.get('pid')
        admin = User.objects.filter(id='1')
        id = request.GET.get('id')
        if pid == '5':
            products = FirePumpService.objects.get(fire_pump_id=id)
            getuser = User.objects.filter(id=products.fire_pump_id.smpid.clientid.id)
            
        elif pid == '6':
            products = FireDetectionService.objects.get(fire_detection_id=id)
            getuser = User.objects.filter(id=products.fire_detection_id.smpid.clientid.id)
            
        elif pid == '8':
            products = SuppresionSystemService.objects.get(suppresion_system_id=id)
            getuser = User.objects.filter(id=products.suppresion_system_id.smpid.clientid.id)
            
        else:
            messages.info(request,'Something Wrong')
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        p = products.details_lable
        s = products.service_remarks
        a = p.split(',')
        b = s.split(',')
        list = zip(a,b)
        info = {'list':list,'products':products,'pid':pid,'getuser':getuser,'admin':admin}
        template = get_template('pdf_report_service.html')
        html = template.render(info)
        result = BytesIO()
        pdf = pisa.pisaDocument(BytesIO(html.encode("utf-8")), result)
        if not pdf.err:
            return HttpResponse(result.getvalue(), content_type='application/pdf')
        return None
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    # except:
    #     messages.info(request,'Something Wrong')
    #     return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    
def excel_report_service(request):
    response = HttpResponse(content_type='application/ms-excel')
    response['Content-Disposition'] = 'attachment; filename="users.xls"'

    wb = xlwt.Workbook(encoding='utf-8')
    ws = wb.add_sheet('Users')
    # Sheet header, first row
    font_style = xlwt.XFStyle()
    font_style.font.bold = True
    center_style = xlwt.easyxf('align:  vert center, horiz center;')
    ws.write(0, 6, 'Hindustan Petroleum Corporation Limited', center_style)
    ws.write(1, 6, '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071', center_style)
    ws.write(2, 6, 'FIRE SAFETY & SECURITY ENGINEERS', center_style)
    row_num = 11
    pid = request.GET.get('pid')
    id = request.GET.get('id')
    
    if pid == '5':
        columns = ['Detail Label', 'Remark',]
        products = FirePumpService.objects.get(fire_pump_id=id)
        getuser = User.objects.filter(id=products.fire_pump_id.smpid.clientid.id)
        for u in getuser:
            ws.write(6, 0, 'To', font_style)
            ws.write(7, 0, u.company, font_style)
            ws.write(8, 0, u.location, font_style)
            ws.write(9, 0, 'Helpline No -' + u.phone, font_style)
            
        for col_num  in range(len(columns)):
            ws.write(row_num, col_num, columns[col_num], font_style)
            
    elif pid == '6':
        columns = ['Detail Label', 'Remark',]
        products = FireDetectionService.objects.get(fire_detection_id=id)
        getuser = User.objects.filter(id=products.fire_detection_id.smpid.clientid.id)
        for u in getuser:
            ws.write(6, 0, 'To', font_style)
            ws.write(7, 0, u.company, font_style)
            ws.write(8, 0, u.location, font_style)
            ws.write(9, 0, 'Helpline No -' + u.phone, font_style)
            
        for col_num  in range(len(columns)):
            ws.write(row_num, col_num, columns[col_num], font_style)
            
    elif pid == '8':
        columns = ['Detail Label', 'Remark',]
        products = SuppresionSystemService.objects.get(suppresion_system_id=id)
        getuser = User.objects.filter(id=products.suppresion_system_id.smpid.clientid.id)
        for u in getuser:
            ws.write(6, 0, 'To', font_style)
            ws.write(7, 0, u.company, font_style)
            ws.write(8, 0, u.location, font_style)
            ws.write(9, 0, 'Helpline No -' + u.phone, font_style)
            
        for col_num  in range(len(columns)):
            ws.write(row_num, col_num, columns[col_num], font_style)
            
    else:
        return HttpResponse('Wrong.. ID')
        
    # Sheet body, remaining rows
    font_style = xlwt.XFStyle()
    date_style = xlwt.easyxf(num_format_str='YYYY/MM/DD')
    
    p = products.details_lable
    s = products.service_remarks
    a = p.split(',')
    b = s.split(',')
    rows = zip(a,b)
        
    #rows = SiteModelProduct.objects.all().values_list('clientid', 'location', 'modelno', 'pid')
    for row in rows:
        row_num += 1
        for col_num in range(len(row)):
            if isinstance(row[col_num], datetime.datetime):
                ws.write(row_num, col_num, row[col_num].strftime('%Y/%m/%d'), date_style)
            else:
                ws.write(row_num, col_num, row[col_num], font_style)

    wb.save(response)
    return response
    
def pdf_report(request):
    try:
        model_no = request.GET.get('model_no')
        pid = request.GET.get('pid')
        fetype = request.GET.get('fetype')
        admin = User.objects.filter(id=request.user.id)
        model_no_values = model_no.split(',')
        model_no_final = []
        for e in model_no_values:
            if not e in model_no_final:
                model_no_final.append(e)
        
        products = []
        if pid == '10':
            for i in model_no_final:
                products += FireExtinguisherHPCL.objects.filter(smpid__modelno=i).order_by('-id') #remarks__in=[value.strip() for value in remarks_values]).order_by('-id') #[:1]
        elif pid == '11':
            for i in model_no_final:
                products += FireHydrantHPCL.objects.filter(smpid__modelno=i).order_by('-id')
        else:
            products = SiteModelProduct.objects.filter(modelno__in=model_no_values)
        info = {'products':products,'pid':pid,'fetype':fetype,'admin':admin}
        template = get_template('pdf_report.html')
        html = template.render(info).encode("utf-8")
        # Configuration for A3 size

        result = BytesIO()
        pdf = pisa.pisaDocument(BytesIO(html), result)
        if not pdf.err:
             # Set the Content-Disposition header for auto-download
            return HttpResponse(result.getvalue(), content_type='application/pdf')
            # response['Content-Disposition'] = 'attachment; filename="gape-report.pdf"'
            # return response
        messages.info(request, 'Error generating PDF')
        return redirect(request.META.get('HTTP_REFERER'))
    except:
        messages.info(request,'Something Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
     
import xlwt

from openpyxl import Workbook
from openpyxl.styles import Alignment
from openpyxl.utils import get_column_letter


def excel_report(request):
    model_no = request.GET.get('model_no')
    pid = request.GET.get('pid')
    fetype = request.GET.get('fetype')
    model_no_values = model_no.split(',')
    # Create a new Excel workbook
    wb = Workbook()
    ws = wb.active

    # Set column widths
    column_widths = [12, 12, 12, 15, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 25, 25]
    for i, width in enumerate(column_widths, start=1):
        column_letter = get_column_letter(i)
        ws.column_dimensions[column_letter].width = width

    # Set row heights starting from 6th row
    for row in range(6, ws.max_row + 1):
        ws.row_dimensions[row].height = 15

    if pid == '10':
        if fetype == 'DCP':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'DCP Report'
            ws['G5'] = ''


            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date Of Discard', 'Certificate No',
                        'Capacity', 'Location','Unit','Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.dateofoverhauling, obj.duedateoverhauling, obj.duedatediscard,
                        obj.certificateno, obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name, obj.engg_comment,clid_full_name ,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=DCP.xlsx'
        if fetype == 'CO2':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'CO2 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center') 
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Certificate No','Capacity','Location','Unit', 'Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.certificateno, obj.capacity, obj.smpid.location, obj.smpid.unit, emp_full_name,obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=CO2.xlsx'
        if fetype == 'FE36':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'FE36 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Discard', 'Certificate No','Capacity', 'Location','Unit','Operator Name', 'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht,  obj.duedatediscard,obj.certificateno,obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name,  obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=FE36.xlsx'
    else:
        # Write header information
        ws['G1'] = 'Hindustan Petroleum Corporation Limited'
        ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
        ws['G3'] = 'Fire Safety & Department'
        ws['G4'] = 'Hydrant Point'
        ws['G5'] = ''

        ws['G1'].alignment = Alignment(horizontal='center')
        ws['G2'].alignment = Alignment(horizontal='center')
        ws['G3'].alignment = Alignment(horizontal='center')
        ws['G4'].alignment = Alignment(horizontal='center')

        queryset = FireHydrantHPCL.objects.filter(smpid__modelno__in=model_no_values)

        # Write column headers
        ws.append(['Hydrant No', 'Size (3L)', 'Size (4)', 'Size (3R)', 'Monitor', 'Left Side (LV/GV)', 'Right Side (LV/GV)', 'Hydrant Block Valve', 'Off Site Unitarea','Location','Unit','Operator Name',
                         'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])

        # Write data rows
        for obj in queryset:
            emp_full_name = ""
            clid_full_name = ""
            if obj.empid is not None:
                emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
            if obj.clientid is not None:
                clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
            ws.append([obj.hydrantno, obj.size3, obj.size4, obj.size3s, obj.monitor, obj.leftsidelvgv, obj.rightsidelvgv, obj.hydrantblockvalve, obj.offsiteunitarea,obj.smpid.location, obj.smpid.unit,emp_full_name,
                     obj.engg_comment, clid_full_name, obj.client_comment, obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

        # Prepare HTTP response
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=Hydrant-point.xlsx'

    # Save the workbook to the HTTP response
    wb.save(response)
    return response
    # response = HttpResponse(content_type='application/ms-excel')
    # response['Content-Disposition'] = 'attachment; filename="History.xls"'

    # wb = xlwt.Workbook(encoding='utf-8')
    # ws = wb.add_sheet('History Report')
    # # Sheet header, first row
    # font_style = xlwt.XFStyle()
    # font_style.font.bold = True
    # center_style = xlwt.easyxf('align:  vert center, horiz center;')
    # ws.write(0, 6, 'Hindustan Petroleum Corporation Limited', center_style)
    # ws.write(1, 6, '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071', center_style)
    # ws.write(2, 6, 'FIRE SAFETY & DEPARTMENT', center_style)
    # row_num = 4
    # model_no = request.GET.get('model_no')
    # pid = request.GET.get('pid')
    # fetype = request.GET.get('fetype')
    # if pid == '10':
    #     if fetype == 'DCP':
    #         columns = ['FEType', 'Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date OF Discard', 'Certificate No',
    #                     'Capacity', 'Locaton','Unit', 'Operator Name','Operator Comment','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
            
    #         for col_num  in range(len(columns)):
    #             ws.write(row_num, col_num, columns[col_num], font_style)
                
    #         model_no_values = model_no.split(',')
    #         rows = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values).values_list(
    #             'FEType', 'extgno', 'make', 'cylinderno', 'mfgyear', 'dateofht', 'duedateht', 'dateofoverhauling', 'duedateoverhauling',
    #             'duedatediscard', 'certificateno', 'capacity', 'smpid__location', 'smpid__unit', 'empid__first_name', 'empid__last_name',
    #             'engg_comment', 'client_comment', 'health', 'createdate', 'updatedate'
    #         )

    #         # Concatenate first name and last name
    #         rows = [(row[:-3] + ((row[-3] + " " + row[-2]) if row[-3] and row[-2] else ""),) + row[-3:] for row in rows]


    #     if fetype == 'CO2':
    #         columns = ['FEType', 'Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Certificate No',
    #                 'Capacity','Locaton','Unit', 'Operator Comment','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
        
    #         for col_num  in range(len(columns)):
    #             ws.write(row_num, col_num, columns[col_num], font_style)
                
    #         model_no_values = model_no.split(',')
    #         rows = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values).values_list('FEType', 'extgno', 'make', 'cylinderno',
    #                 'mfgyear', 'dateofht', 'duedateht', 'certificateno', 'capacity','smpid__location','smpid__unit',
    #                 'engg_comment','client_comment','health','createdate','updatedate')
   
    #     if fetype == 'FE36':
    #         columns = ['FEType', 'Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date OF Discard', 'Certificaten No',
    #                     'Capacity', 'Locaton','Unit', 'Operator Comment','Client Comment','Health','Operator Inspection Date','Officer Inspection Date']
                
    #         for col_num  in range(len(columns)):
    #             ws.write(row_num, col_num, columns[col_num], font_style)
                
    #         model_no_values = model_no.split(',')
    #         rows = FireExtinguisherHPCL.objects.filter(smpid__modelno__in=model_no_values).values_list('FEType', 'extgno', 'make', 'cylinderno',
    #                 'mfgyear', 'dateofht', 'duedateht', 'duedatediscard', 'certificateno', 'capacity','smpid__location','smpid__unit',
    #                 'engg_comment','client_comment','health','createdate','updatedate')

    # elif pid == '11':
    #     columns = ['Hydrant No', 'Size (3L)', 'Size (4)', 'Size (3R)', 'Monitor', 'Left Side LV/GV', 'Right Side LV/GV', 'Hydrant Block Valve', 'Off Site Unitarea','Location','Unit',
    #                  'Operator Comment','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
    
            
    #     for col_num  in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = FireHydrantHPCL.objects.filter(smpid__modelno__in=model_no_values).values_list('hydrantno', 'size3', 'size4', 'size3s','monitor','leftsidelvgv','rightsidelvgv','hydrantblockvalve','offsiteunitarea','smpid__location','smpid__unit',
    #             'engg_comment','client_comment','health','createdate','updatedate')
    # else:
    #     columns = ['Modelno', 'Location', 'Employee','Client name','Product Id' ]

    #     for col_num in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = SiteModelProduct.objects.filter(modelno__in=model_no_values).values_list('modelno', 'location','empid__email', 'clientid__company', 'pid__pname')

    # # Sheet body, remaining rows
    # font_style = xlwt.XFStyle()
    # date_style = xlwt.easyxf()

    # for row in rows:
    #     row_num += 1
    #     for col_num in range(len(row)):
    #         if isinstance(row[col_num], datetime.date):
    #             ws.write(row_num, col_num, row[col_num].strftime('%Y/%m/%d'), date_style)
    #         else:
    #             ws.write(row_num, col_num, row[col_num], font_style)

    # wb.save(response)
    # return response
    
    
    ###### gap report ######
@csrf_exempt 
def gap_analisis_report_pdf(request):
    try:
        if request.method == "POST":
            model_no = request.POST.get('model_no')
            pid = request.POST.get('pid')
            admin = User.objects.filter(id=request.user.id)
            model_no_values = model_no.split(',')
            
            products = []
            if pid == '11':
                products = FireHydrantHPCL.objects.filter(id__in=model_no_values)
                info = {'products':products,'pid':pid,'admin':admin}
            else:
                products = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)
                info = {'products':products,'pid':'10','fetype':pid,'admin':admin}
            template = get_template('pdf_report.html')
            html = template.render(info).encode("utf-8")
            # Configuration for A3 size
            options = {
                'page-size': 'A3 landscape',
                'margin-top': '10mm',
                'margin-right': '10mm',
                'margin-bottom': '10mm',
                'margin-left': '10mm',
            }

            result = BytesIO()
            pdf = pisa.pisaDocument(BytesIO(html), result, options=options)
            if not pdf.err:
                # Set the Content-Disposition header for auto-download
                return HttpResponse(result.getvalue(), content_type='application/pdf')
                # response = HttpResponse(result.getvalue(), content_type='application/pdf')
                # response['Content-Disposition'] = 'attachment; filename="Gap-report.pdf"'
                #print('s')
                return response
            messages.info(request, 'Error generating PDF')
            return redirect(request.META.get('HTTP_REFERER'))
    except:
        messages.info(request,'Something Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
     
@csrf_exempt
def excel_gap_report(request):
    if request.method == 'POST':
        model_no = request.POST.get('model_no')
        pid = request.POST.get('pid')
        model_no_values = model_no.split(',')
        # Create a new Excel workbook
        wb = Workbook()
        ws = wb.active
        print('start')
        # Set column widths
        column_widths = [12, 12, 12, 15, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 25, 25]
        for i, width in enumerate(column_widths, start=1):
            column_letter = get_column_letter(i)
            ws.column_dimensions[column_letter].width = width

        # Set row heights starting from 6th row
        for row in range(6, ws.max_row + 1):
            ws.row_dimensions[row].height = 15

        if pid == 'DCP':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'DCP Report'
            ws['G5'] = ''


            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date Of Discard', 'Certificate No',
                        'Capacity', 'Location','Unit','Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.dateofoverhauling, obj.duedateoverhauling, obj.duedatediscard,
                        obj.certificateno, obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name, obj.engg_comment,clid_full_name ,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=DCP.xlsx'
            print('start')
        elif pid == 'CO2':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'CO2 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center') 
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Certificate No','Capacity','Location','Unit', 'Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.certificateno, obj.capacity, obj.smpid.location, obj.smpid.unit, emp_full_name,obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=CO2.xlsx'
            print('m')
        elif pid == 'FE36':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'FE36 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Discard', 'Certificate No','Capacity', 'Location','Unit','Operator Name', 'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht,  obj.duedatediscard,obj.certificateno,obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name,  obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=FE36.xlsx'
        else:
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'Hydrant Point'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireHydrantHPCL.objects.filter(id__in=model_no_values)

            # Write column headers
            ws.append(['Hydrant No', 'Size (3L)', 'Size (4)', 'Size (3R)', 'Monitor', 'Left Side (LV/GV)', 'Right Side (LV/GV)', 'Hydrant Block Valve', 'Off Site Unitarea','Location','Unit','Operator Name',
                            'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])

            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.hydrantno, obj.size3, obj.size4, obj.size3s, obj.monitor, obj.leftsidelvgv, obj.rightsidelvgv, obj.hydrantblockvalve, obj.offsiteunitarea,obj.smpid.location, obj.smpid.unit,emp_full_name,
                        obj.engg_comment, clid_full_name, obj.client_comment, obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=Hydrant-point.xlsx'

        # Save the workbook to the HTTP response
        wb.save(response)
        return response
    # response = HttpResponse(content_type='application/ms-excel')
    # response['Content-Disposition'] = 'attachment; filename="Gap Report.xls"'

    # wb = xlwt.Workbook(encoding='utf-8')
    # ws = wb.add_sheet('Users')
    # # Sheet header, first row
    # font_style = xlwt.XFStyle()
    # font_style.font.bold = True
    # center_style = xlwt.easyxf('align:  vert center, horiz center;')
    # ws.write(0, 6, 'Hindustan Petroleum Corporation Limited', center_style)
    # ws.write(1, 6, '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071', center_style)
    # ws.write(2, 6, 'FIRE SAFETY & DEPARTMENT', center_style)
    # row_num = 4
    # model_no = request.GET.get('model_no')
    # pid = request.GET.get('pid')
    # user = request.GET.get('user')
    # if pid == 'DCP':
    #     columns = ['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date Of Discard', 'Certificate No',
    #                 'Capacity', 'Location','Unit','Operator Name', 'Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
            
    #     for col_num  in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).values_list(
    #         'extgno', 'make', 'cylinderno', 'mfgyear', 'dateofht', 'duedateht', 'dateofoverhauling', 'duedateoverhauling', 'duedatediscard',
    #         'certificateno', 'capacity', 'smpid__location', 'smpid__unit', 'empid__first_name', 'empid__last_name',
    #         'engg_comment', 'clientid__first_name', 'clientid__last_name', 'client_comment', 'health', 'createdate', 'updatedate'
    #     )
        
    #     # # rows = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).values_list('extgno', 'make', 'cylinderno', 'mfgyear', 'dateofht', 'duedateht', 'dateofoverhauling', 'duedateoverhauling', 'duedatediscard',
    #     # #             'certificateno', 'capacity','smpid__location', 'smpid__unit', Concat('empid__first_name', Value(' '), 'empid__last_name'), 'engg_comment', Concat('clientid__first_name', Value(' '), 'clientid__last_name'),'client_comment','health', 'createdate', 'updatedate')

    # elif pid == 'CO2':
    #     columns = ['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Certificate No',
    #                 'Capacity', 'Location','Unit',  'Operator Comment','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
        
            
    #     for col_num  in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).values_list('extgno', 'make', 'cylinderno', 'mfgyear', 'dateofht', 'duedateht', 'certificateno',
    #                 'capacity','smpid__location', 'smpid__unit', 'engg_comment','client_comment','health', 'createdate','updatedate')

    # elif pid == 'FE36':
    #     columns = ['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT','Date Of Discard', 'Certificate No',
    #                 'Capacity', 'Location','Unit','Operator Comment','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date']
        
            
    #     for col_num  in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).values_list('extgno', 'make', 'cylinderno', 'mfgyear', 'dateofht', 'duedateht','duedatediscard','certificateno',
    #                 'capacity','smpid__location', 'smpid__unit',  'engg_comment','client_comment','health', 'createdate','updatedate')

    # else:
    #     columns = ['Hydrant No', 'Size (3L)', 'Size (4)', 'Size (3R)', 'Monitor', 'Left Side (LV/GV)', 'Right Side (LV/GV)', 'Hydrant Block Valve', 'Off Site Unitarea','Location', 'Unit',
    #                 'Operator Comment','Officer Comment','Health','Operator Inspection Date','Operator Inspection Date']
            
    #     for col_num  in range(len(columns)):
    #         ws.write(row_num, col_num, columns[col_num], font_style)
            
    #     model_no_values = model_no.split(',')
    #     rows = FireHydrantHPCL.objects.filter(id__in=model_no_values).values_list('hydrantno', 'size3', 'size4', 'size3s','monitor','leftsidelvgv','rightsidelvgv','hydrantblockvalve','offsiteunitarea','smpid__location','smpid__unit',
    #             'engg_comment','client_comment','health','createdate','updatedate')
    
    # # Sheet body, remaining rows
    # font_style = xlwt.XFStyle()
    # date_style = xlwt.easyxf(num_format_str='YYYY/MM/DD')


    # for row in rows:
    #     row_num += 1
    #     for col_num in range(len(row)):
    #         if isinstance(row[col_num], datetime.date):
    #             ws.write(row_num, col_num, row[col_num].strftime('%Y/%m/%d'), date_style)
    #         else:
    #             ws.write(row_num, col_num, row[col_num], font_style)

    # wb.save(response)
    # return response
    
    #### End Gap report ######
    
    
    ## start monthly report ##


@csrf_exempt
def monthly_report_pdf(request):
    try:
        if request.method == "POST":
            model_no = request.POST.get('model_no')
            pid = request.POST.get('pid')
            fetype = request.POST.get('fetype')
            model_no_values = model_no.split(',')
            admin = User.objects.filter(id=request.user.id)
            products = []
            if pid == '11':
                products = FireHydrantHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')
                info = {'products':products,'pid':pid,'admin':admin}
            else:
                products = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')
                info = {'products':products,'pid':'10','admin':admin,'fetype':pid}
            template = get_template('pdf_report.html')
            html = template.render(info)
            result = BytesIO()
            pdf = pisa.pisaDocument(BytesIO(html.encode("UTF-8")), result)
            if not pdf.err:
                response = HttpResponse(result.getvalue(), content_type='application/pdf')
                # Do not force download, let the browser handle opening the PDF
                # response = HttpResponse(result.getvalue(), content_type='application/pdf')
                # response['Content-Disposition'] = 'attachment; filename="monthly_report.pdf"'
                #print('s')
                return response
            messages.error(request, 'Error generating PDF')
            return redirect(request.META.get('HTTP_REFERER'))
    except Exception as e:
        messages.error(request, f'Something went wrong: {str(e)}')
        return redirect(request.META.get('HTTP_REFERER'))

    

@csrf_exempt
def monthly_report_to_excel(request):
    if request.method == "POST":
        model_no = request.POST.get('model_no')
        pid = request.POST.get('pid')
        model_no_values = model_no.split(',')
        # Create a new Excel workbook
        wb = Workbook()
        ws = wb.active

        # Set column widths
        column_widths = [12, 12, 12, 15, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 25, 25]
        for i, width in enumerate(column_widths, start=1):
            column_letter = get_column_letter(i)
            ws.column_dimensions[column_letter].width = width

        # Set row heights starting from 6th row
        for row in range(6, ws.max_row + 1):
            ws.row_dimensions[row].height = 15

        if pid == 'DCP':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'DCP Report'
            ws['G5'] = ''


            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date Of Discard', 'Certificate No',
                        'Capacity', 'Location','Unit','Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.dateofoverhauling, obj.duedateoverhauling, obj.duedatediscard,
                        obj.certificateno, obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name, obj.engg_comment,clid_full_name ,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=DCP.xlsx'
   
        elif pid == 'CO2':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'CO2 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center') 
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Certificate No','Capacity','Location','Unit', 'Operator Name','Operator Comment','Officer Name' ,'Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.certificateno, obj.capacity, obj.smpid.location, obj.smpid.unit, emp_full_name,obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=CO2.xlsx'
        elif pid == 'FE36':
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'FE36 Report'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')

            # Write column headers
            ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Discard', 'Certificate No','Capacity', 'Location','Unit','Operator Name', 'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
            
            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht,  obj.duedatediscard,obj.certificateno,obj.capacity,obj.smpid.location, obj.smpid.unit,emp_full_name,  obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=FE36.xlsx'
        else:
            # Write header information
            ws['G1'] = 'Hindustan Petroleum Corporation Limited'
            ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
            ws['G3'] = 'Fire Safety & Department'
            ws['G4'] = 'Hydrant Point'
            ws['G5'] = ''

            ws['G1'].alignment = Alignment(horizontal='center')
            ws['G2'].alignment = Alignment(horizontal='center')
            ws['G3'].alignment = Alignment(horizontal='center')
            ws['G4'].alignment = Alignment(horizontal='center')

            queryset = FireHydrantHPCL.objects.filter(id__in=model_no_values).prefetch_related('smpid','empid','clientid')

            # Write column headers
            ws.append(['Hydrant No', 'Size (3L)', 'Size (4)', 'Size (3R)', 'Monitor', 'Left Side (LV/GV)', 'Right Side (LV/GV)', 'Hydrant Block Valve', 'Off Site Unitarea','Location','Unit','Operator Name',
                            'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])

            # Write data rows
            for obj in queryset:
                emp_full_name = ""
                clid_full_name = ""
                if obj.empid is not None:
                    emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
                if obj.clientid is not None:
                    clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
                ws.append([obj.hydrantno, obj.size3, obj.size4, obj.size3s, obj.monitor, obj.leftsidelvgv, obj.rightsidelvgv, obj.hydrantblockvalve, obj.offsiteunitarea,obj.smpid.location, obj.smpid.unit,emp_full_name,
                        obj.engg_comment, clid_full_name, obj.client_comment, obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

            # Prepare HTTP response
            response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=Hydrant-point.xlsx'

        # Save the workbook to the HTTP response
        wb.save(response)
        return response

    ## end monthly report ##

######  Alert Report
def alert_pdf_report(request):
    try:
        model_no = request.GET.get('model_no')
        pid = request.GET.get('pid')
        model_no_values = model_no.split(',')
        admin = User.objects.filter(id=request.user.id)
        products = []
        products = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)
        info = {'products':products,'pid':pid, 'admin':admin}
        template = get_template('alert/fealert.html')
        html = template.render(info).encode("utf-8")
        
        # return HttpResponse(products)
        result = BytesIO()
        pdf = pisa.pisaDocument(BytesIO(html), result)
        if not pdf.err:
            return HttpResponse(result.getvalue(), content_type='application/pdf')
        else:
            messages.error(request, 'Error generating PDF: ' + pdf.err)
            return redirect(request.META.get('HTTP_REFERER'))
    except:
        messages.info(request,'Something Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

def alert_excel_report(request):
    model_no = request.GET.get('model_no')
    pid = request.GET.get('pid')
    model_no_values = model_no.split(',')

    # Create a new Excel workbook
    wb = Workbook()
    ws = wb.active

    # Set column widths
    column_widths = [12, 12, 12, 15, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 25, 25]
    for i, width in enumerate(column_widths, start=1):
        column_letter = get_column_letter(i)
        ws.column_dimensions[column_letter].width = width

    # Set row heights starting from 6th row
    for row in range(6, ws.max_row + 1):
        ws.row_dimensions[row].height = 15

    if pid == 'DCP':
        # Write header information
        ws['G1'] = 'Hindustan Petroleum Corporation Limited'
        ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
        ws['G3'] = 'Fire Safety & Department'
        ws['G4'] = 'DCP Over Due Report'
        ws['G5'] = ''


        ws['G1'].alignment = Alignment(horizontal='center')
        ws['G2'].alignment = Alignment(horizontal='center')
        ws['G3'].alignment = Alignment(horizontal='center')
        ws['G4'].alignment = Alignment(horizontal='center')

        queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

        # Write column headers
        ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Overhauling', 'Due Date Overhauling', 'Date Of Discard', 'Certificate No',
                    'Capacity', 'Location','Unit','Operator Name','Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
        
        # Write data rows
        # Write data rows
        for obj in queryset:
            emp_full_name = ""
            clid_full_name = ""
            if obj.empid is not None:
                emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
            if obj.clientid is not None:
                clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
            ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht, obj.dateofoverhauling, obj.duedateoverhauling, obj.duedatediscard,
                    obj.certificateno, obj.capacity, obj.smpid.location, obj.smpid.unit, emp_full_name, obj.engg_comment, clid_full_name, obj.client_comment, obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

        # Prepare HTTP response
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=DCP Over Due Report.xlsx'
    elif pid == 'CO2':
        # Write header information
        ws['G1'] = 'Hindustan Petroleum Corporation Limited'
        ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
        ws['G3'] = 'Fire Safety & Department'
        ws['G4'] = 'CO2 Over Due Report'
        ws['G5'] = ''

        ws['G1'].alignment = Alignment(horizontal='center')
        ws['G2'].alignment = Alignment(horizontal='center') 
        ws['G3'].alignment = Alignment(horizontal='center')
        ws['G4'].alignment = Alignment(horizontal='center')

        queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

        # Write column headers
        ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT',  'Certificate No','Capacity','Location','Unit', 'Operator Name','Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
        
        # Write data rows
        for obj in queryset:
            emp_full_name = ""
            clid_full_name = ""
            if obj.empid is not None:
                emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
            if obj.clientid is not None:
                clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
            ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht,  obj.certificateno, obj.capacity, obj.smpid.location, obj.smpid.unit, emp_full_name,obj.engg_comment, clid_full_name,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

        # Prepare HTTP response
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=CO2 Over Due Report.xlsx'
    elif pid == 'FE36':
        # Write header information
        ws['G1'] = 'Hindustan Petroleum Corporation Limited'
        ws['G2'] = '2VFX+6W2, Bhikaji Damaji Patil Rd, Bharat Petroleum Refinery, Mahul, Mumbai, Maharashtra 400071'
        ws['G3'] = 'Fire Safety & Department'
        ws['G4'] = 'FE36 Over Due Report'
        ws['G5'] = ''

        ws['G1'].alignment = Alignment(horizontal='center')
        ws['G2'].alignment = Alignment(horizontal='center')
        ws['G3'].alignment = Alignment(horizontal='center')
        ws['G4'].alignment = Alignment(horizontal='center')

        queryset = FireExtinguisherHPCL.objects.filter(id__in=model_no_values)

        # Write column headers
        ws.append(['Extg No', 'Make', 'Cylinder No', 'MFG Year', 'Date Of HT', 'Due Date HT', 'Date Of Discard', 'Certificate No','Capacity', 'Location','Unit','Operator Name', 'Operator Comment','Officer Name','Officer Comment','Health','Operator Inspection Date','Officer Inspection Date'])
        
        # Write data rows
        for obj in queryset:
            emp_full_name = ""
            clid_full_name = ""
            if obj.empid is not None:
                emp_full_name = obj.empid.first_name + " " + obj.empid.last_name
            if obj.clientid is not None:
                clid_full_name = obj.clientid.first_name + " " + obj.clientid.last_name
            ws.append([obj.extgno, obj.make, obj.cylinderno, obj.mfgyear, obj.dateofht, obj.duedateht,  obj.duedatediscard,obj.certificateno,obj.capacity,obj.smpid.location, obj.smpid.unit, emp_full_name, obj.engg_comment,clid_full_name ,obj.client_comment,obj.health, obj.createdate.replace(tzinfo=None), obj.updatedate.replace(tzinfo=None)])

        # for col_num in range(len(columns)):
        #     max_length = 0
        #     # Exclude the last row from adjustment
        #     for row_num in range(4, row_num):
        #         cell_value = ws.cell(row_num, col_num).value
        #         cell_length = len(str(cell_value)) if cell_value else 0
        #         if cell_length > max_length:
        #             max_length = cell_length

        #     adjusted_width = (max_length + 2) * 256  # Adjusted width with some padding (256 is the width unit)
        #     ws.col(col_num).width = adjusted_width

        # Prepare HTTP response
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=FE36 Over Due Report.xlsx'

    # Save the workbook to the HTTP response
    wb.save(response)
    return response
    
    
    
    ##### Start search report #####

def report_search(request):
    q = request.GET.get('q')
    all_reports = SiteModelProduct.objects.all()

    if q:
        all_reports = all_reports.filter(Q(modelno__icontains=q) | Q(location__icontains=q) | Q(FireExtinguisherHPCL_smpid__FEType__icontains=q) | Q(FireExtinguisherHPCL_smpid__extgno__icontains=q) | Q(FireHydrantHPCL_smpid__hydrantno__icontains=q) | Q(unit__icontains=q) | Q(empid__first_name__icontains=q) | Q(empid__last_name__icontains=q)).distinct()
    paginator = Paginator(all_reports, 500)  # Assuming 10 records per page
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    
    report_data = list(page_obj.object_list.values())
    # return JsonResponse({'status':200,'page_obj':page_obj})
    return render(request,'mfire/report.html',{'page_obj':page_obj})

    #### end search report ######

def home(request):
    user = User.objects.filter(id=1)
    Homepages = Homepage.objects.filter(id=1)
    #return render(request,'newindex.html')
    return render(request,'index.html',{'user':user,'Homepages':Homepages})

def help(request):
    user = User.objects.filter(id=1)
    Homepages = Homepage.objects.filter(id=1)
    #return render(request,'newindex.html')
    return render(request,'help.html',{'user':user,'Homepages':Homepages})
    
    # active deactive 
    
def deleteuser(request,id,code):
    if request.method == "GET":
        UserModel = get_user_model()
        users = UserModel.objects.get(id = id)
        users.is_active = code
        users.save()
        messages.info(request,'Update Operator Success')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        messages.info(request,'Something Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        
        
def all_tickete_admin(request):
    ticketes = SupportTickets.objects.all()
    products = Product.objects.all()
    return render(request,'mfire/alltickete.html',{'ticketes':ticketes,'products':products})

def update_tickete(request):
    id = request.GET.get('id')
    ticketes = SupportTickets.objects.get(id=id)
    if request.method == "POST":
        form = SupportTicketsForm(request.POST,request.FILES,instance=ticketes)
        if form.is_valid():
            form.save()
            messages.success(request, 'Update success.')
            return redirect('/mfire/all_tickete_admin/')
    else:
        allemp = User.objects.filter(user_type='1')
        ticketes = SupportTickets.objects.get(id=id)
        products = Product.objects.all()
        return render(request, 'mfire/update_tickete.html', {'ticketes': ticketes,'allemp':allemp,'products':products})
    
      
        # Edit

@csrf_exempt
def adminlogin(request):
    try:
        if request.user.is_authenticated:
            return redirect('/mfire/dashboard/')
        if request.method == "POST":
            email = request.POST.get("email")
            password = request.POST.get("password")
            chkAgree = request.POST.get("chkAgree")
            if chkAgree == 'on':
                user = authenticate(email=email, password=password)
                if user:
                    if user.is_active:
                        login(request, user)
                        return JsonResponse({'status':200})
                    else:
                        return JsonResponse({'status':1,'msg':'Your account temperery block. Please contact your admin'})
                else:
                    return JsonResponse({'status':1,'msg':'wrong email and password ....'})
            else:
                return JsonResponse({'status':1,'msg':'Please checked privecy statement.'})
        else:
            form = LogInForm()
            return render(request, 'mfire/login.html')
    except:
        return redirect('/')
        
        
# def adminclientregister(request):
#     try:
#         if request.method == 'POST':
#             password = request.POST.get('password')
#             email = request.POST.get('email')
#             phone = request.POST.get('phone')
#             first_name = request.POST.get('first_name')
#             last_name = request.POST.get('last_name')
#             user_type = request.POST.get('user_type')
#             location = request.POST.get('location')
#             clinetlocation = request.POST.getlist('location[]')
#             company = request.POST.get('company')
#             UserModel = get_user_model()
#             if UserModel.objects.filter(email=email).exists():
#                 messages.info(request,'Email Already taken')
#                 return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
#             elif UserModel.objects.filter(phone=phone).exists():
#                 messages.info(request,'Mobile Number Already taken')
#                 return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
#             else:
#                 send_token = str(uuid.uuid4())
#                 msg_plain = render_to_string('email.txt')
#                 user = UserModel.objects.create_user(first_name=first_name,last_name=last_name,password=password,email=email,phone=phone,location=location,company=company,user_type=user_type)
#                 if clinetlocation:
#                     for i in clinetlocation:
#                         clientl = ClientLocation(client_id=user,cl_location=i)
#                         clientl.save()
#                 try:
#                     msg = render_to_string('email/register.html',{'password':password,'email':email,'user_type':user_type,'company':company,'first_name':first_name,'last_name':last_name})
#                     send_mail('Welcome to the Fire Inspector portal, here details of registration', msg_plain, settings.EMAIL_HOST_USER, [user.email],html_message = msg) # user 
#                     send_mail('Welcome to the Fire Inspector portal, here details of registration', msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msg) #  Admin
#                 except:
#                     pass
#                 messages.success(request, 'Register Success.')
#                 return redirect('/mfire/allemployee')
#         else:
#             return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
#     except:
#         messages.success(request, 'some thing wrong.')
#         return redirect('/')

def adminregister(request):
    if request.method == 'POST':
        password = request.POST.get('password')
        email = request.POST.get('email')
        phone = request.POST.get('phone')
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        user_type = request.POST.get('user_type')
        address = request.POST.get('address')
        clinetlocation = request.POST.getlist('location')
        company = request.POST.get('company')
        staff = request.POST.get('staff')
        UserModel = get_user_model()
        if UserModel.objects.filter(email=email).exists():
            return JsonResponse({'status':'email','msg':'Email Already taken'})
        # elif UserModel.objects.filter(phone=phone).exists():
        #     return JsonResponse({'status':'phone','msg':'Phone Number Already taken'})
        else:
            msg_plain = render_to_string('email.txt')
            user = UserModel.objects.create_user(first_name=first_name,last_name=last_name,password=password,email=email,phone=phone,location=address,company=company,user_type=user_type,is_staff=staff)
            if clinetlocation:
                for i in clinetlocation:
                    clientl = ClientLocation(client_id=user,cl_location=i)
                    clientl.save()
            return JsonResponse({'status':'success'})
    else:
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

        
@login_required(login_url='/mfire/login/')        
def Update_Profile(request):
    if request.method == 'POST':
        admin = User.objects.get(id=request.user.id)
        admin.first_name = request.POST.get('first_name')
        admin.last_name = request.POST.get('last_name')
        admin.email = request.POST.get('email')
        admin.phone = request.POST.get('phone')
        admin.location = request.POST.get('location')
        admin.company = request.POST.get('company')
        if len(request.FILES) != 0:
            if admin.img:
                os.remove(admin.img.path)
            admin.img = request.FILES.get('logo')
        admin.save()
        messages.success(request, 'Update Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        admin = User.objects.get(pk=request.user.id)
        return render(request,'mfire/profile.html',{'admin':admin,'products':products})
    
def loadclient(request):
    id = request.GET.get('v')
    UserModel = get_user_model()
    clients = ClientLocation.objects.filter(client_id=id)
    #return JsonResponse({'status':1,'clients':clients})
    return render(request,'load_data.html',{'clients':clients})
    
def prostatus(request):
    id = request.GET.get('pid')
    proid = SiteModelProduct.objects.filter(pid=id,clientid=request.user.id)
    initiative = proid.filter(status=1).count()
    pending = proid.filter(status=2).count()
    complete = proid.filter(status=3).count()
    #product = SiteModelProduct.filter(status=3).count()
    return render(request,'load_status.html',{'proid':proid,'initiative':initiative,'pending':pending,'complete':complete})

@login_required(login_url='/mfire/login/')
def allemployee(request):
    products = Product.objects.all()
    employees = UserModel.objects.filter(user_type='1')
    paginator = Paginator(employees, 10)  # Show 10 contacts per page.
    page_number = request.GET.get("page")
    employee = paginator.get_page(page_number)
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/all_employee.html',{'products':products,'employees':employee,'clients':clients})

@login_required(login_url='/mfire/login/')
def addemployee(request):
    products = Product.objects.all()
    return render(request,'mfire/add_employee.html',{'products':products})
    
def updateemp(request):
    UserModel = get_user_model()
    if request.method == 'POST':
        user_id = request.POST.get('user_id')
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        phone = request.POST.get('phone')
        email = request.POST.get('email')
        user_type = request.POST.get('user_type')
        staff = request.POST.get('staff')
        UserModel.objects.filter(id=user_id).update(first_name=first_name,last_name=last_name,phone=phone,email=email,user_type=user_type)
        messages.success(request, 'Update Success.')
        return redirect('/mfire/all-Operator/')
    else:
        emp = request.GET.get('emp')
        products = Product.objects.all()
        emp = UserModel.objects.get(id=emp)
        return render(request,'mfire/add_employee.html',{'products':products,'emp':emp})
        
def home_page(request):
    if request.method == 'POST':
        video = request.POST.get('video')
        about = request.POST.get('about')
        saveproduct = Homepage(id=1,video=video,about=about)
        saveproduct.save()
        messages.success(request, 'Data Updated.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        Homepages = Homepage.objects.filter(id=1)
        return render(request,'mfire/home_page.html',{'products':products,'Homepages':Homepages})
        
@login_required(login_url='/mfire/login/')        
def all_new_product(request):
    products = Product.objects.all().order_by('id')
    return render(request,'mfire/all_new_product.html',{'products':products})
        
@login_required(login_url='/mfire/login/')        
def add_new_product(request):
    if request.method == 'POST':
        pname = request.POST.get('pname')
        type = request.POST.get('type')
        image = request.FILES.get('image')
        saveproduct = Product(pname=pname,type=type,image=image)
        saveproduct.save()
        messages.success(request, 'Product Save.')
        return redirect('/mfire/all_new_product/')
    else:
        products = Product.objects.all()
        return render(request,'mfire/add_new_product.html',{'products':products})
        
@login_required(login_url='/mfire/login/')        
def update_new_product(request):
    if request.method == 'POST':
        pid = request.POST.get('pid')
        prod = Product.objects.get(id=pid)
        if len(request.FILES) != 0:
            if prod.image:
                os.remove(prod.image.path)
            prod.image = request.FILES.get('image')
        prod.pname = request.POST.get('pname')
        prod.type = request.POST.get('type')
        prod.save()
        messages.success(request, 'Product Update.')
        return redirect('/mfire/all_new_product/')
    else:
        pid = request.GET.get('pid')
        prod = Product.objects.get(id=pid)
        products = Product.objects.all()
        return render(request,'mfire/add_new_product.html',{'products':products,'prod':prod})
        
def delete_new_product(request):
    pid = request.GET.get('pid')
    prod = Product.objects.get(id=pid)
    prod.delete()
    messages.success(request, 'Delete Product Success.')
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    



@transaction.atomic
@login_required(login_url='/mfire/login/')
def clientregistration(request):
    try:
        if request.method == 'POST':
            modelnumber = request.POST.get('modelnumber')
            product = request.POST.get('product')
            location = request.POST.get('location')
            client = request.POST.get('client')
            employee = request.POST.get('employee')
            unit = request.POST.get('unit')
            UserModel = get_user_model()
            # clientid = UserModel.objects.get(id=client)
            productid = Product.objects.get(id=product)
            if employee:
                empid = UserModel.objects.get(id=employee)
                pmp = SiteModelProduct(modelno=modelnumber,empid=empid,location=location,unit=unit,pid=productid)
            else:
                pmp = SiteModelProduct(modelno=modelnumber,location=location,unit=unit,pid=productid)
            pmp.save()
            
            if product == '10':
                fetype = request.POST.get('fetype')
                extgno = request.POST.get('extgno')
                make = request.POST.get('make')
                cylinderno = request.POST.get('cylinderno')
                mfgyear = request.POST.get('mfgyear')
                dateofht = request.POST.get('dateofht')
                duedateht = request.POST.get('duedateht')
                dateofoverhauling = request.POST.get('dateofoverhauling')
                duedateoverhauling = request.POST.get('duedateoverhauling')
                duedatediscard = request.POST.get('duedatediscard')
                certificateno = request.POST.get('certificateno')
                capacity = request.POST.get('capacity10')
                engg_comment = request.POST.get('engg_comment')
                if mfgyear == '':
                    mfgyear = None
                if duedatediscard == '':
                    duedatediscard = None
                if dateofht == '':
                    dateofht = None
                if duedateht == '':
                    duedateht = None
                if dateofoverhauling == '':
                    dateofoverhauling = None
                if duedateoverhauling == '':
                    duedateoverhauling = None
                product10 = FireExtinguisherHPCL(smpid=pmp,empid=empid,FEType=fetype,extgno=extgno,make=make,cylinderno=cylinderno,mfgyear=mfgyear,dateofht=dateofht,duedateht=duedateht,dateofoverhauling=dateofoverhauling,duedateoverhauling=duedateoverhauling,duedatediscard=duedatediscard,certificateno=certificateno,capacity=capacity,engg_comment=engg_comment,health='ok')
                product10.save()
                messages.success(request, 'Register Success.')
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            elif product == '11':
                hydrantno = request.POST.get('hydrantno')
                size3L = request.POST.get('size3L')
                size4 = request.POST.get('size4')
                size3R = request.POST.get('size3R')
                monitor = request.POST.get('monitor')
                leftsidelvgv = request.POST.get('leftsidelvgv')
                rightsidelvgv = request.POST.get('rightsidelvgv')
                hydrantblockvalve = request.POST.get('hydrantblockvalve')
                offsiteunitarea = request.POST.get('offsiteunitarea')
                engg_comment = request.POST.get('engg_comment')
                product11 = FireHydrantHPCL(smpid=pmp,hydrantno=hydrantno,size3=size3L,size4=size4,size3s=size3R,monitor=monitor,leftsidelvgv=leftsidelvgv,rightsidelvgv=rightsidelvgv,hydrantblockvalve=hydrantblockvalve,offsiteunitarea=offsiteunitarea,engg_comment=engg_comment,health='ok')
                product11.save()
                messages.success(request, 'Register Success.')
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        else:
            products = Product.objects.all()
            UserModel = get_user_model()
            employees = UserModel.objects.filter(user_type='1')
            clients = UserModel.objects.filter(user_type='2')
            return render(request,'mfire/add-equipment.html',{'products':products,'clients':clients,'employees':employees})
    except Exception as e:
        # Roll back the transaction
        transaction.set_rollback(True)
        messages.success(request, f'Error {e}')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        
        
def update_product(request):
    if request.method == 'POST':
        smpid = request.POST.get('smpid')
        pmp = SiteModelProduct.objects.get(id=smpid)
        employee = request.POST.get('employee')
        empid = User.objects.get(id=employee)
        pmp.location = request.POST.get('location')
        pmp.unit = request.POST.get('unit')
        pmp.empid = empid
        pmp.save()
        messages.success(request, f'Update Successfull')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        # if product == '1':
        #     firid = request.POST.get('firid')
        #     product1 = SiteModelProductDetail.objects.get(id=firid)
        #     product1.fetype = request.POST.get('fetype')
        #     product1.capacity = request.POST.get('capacity1')
        #     product1.mfgyear = request.POST.get('mfgyear')
        #     product1.emptycylinderpressure = request.POST.get('emptycylinderpressure')
        #     product1.fullcylinderpressure = request.POST.get('fullcylinderpressure')
        #     product1.netpressure = request.POST.get('netpressure')
        #     product1.lastdaterefilling = request.POST.get('lastdaterefilling')
        #     product1.duedaterefiiling = request.POST.get('duedaterefiiling')
        #     product1.lastdatehpt = request.POST.get('lastdatehpt')
        #     product1.duedatehpt = request.POST.get('duedatehpt')
        #     product1.sparepartrequired = request.POST.get('sparepartrequired')
        #     product1.sparepartitemrequired = request.POST.get('sparepartitemrequired')
        #     product1.remarks = request.POST.get('remarks1')
        #     product1.save()
        #     product1his = SiteModelProductDetailHistory.objects.get(id=firid)
        #     product1his.fetype = request.POST.get('fetype')
        #     product1his.capacity = request.POST.get('capacity1')
        #     product1his.mfgyear = request.POST.get('mfgyear')
        #     product1his.emptycylinderpressure = request.POST.get('emptycylinderpressure')
        #     product1his.fullcylinderpressure = request.POST.get('fullcylinderpressure')
        #     product1his.netpressure = request.POST.get('netpressure')
        #     product1his.lastdaterefilling = request.POST.get('lastdaterefilling')
        #     product1his.duedaterefiiling = request.POST.get('duedaterefiiling')
        #     product1his.lastdatehpt = request.POST.get('lastdatehpt')
        #     product1his.duedatehpt = request.POST.get('duedatehpt')
        #     product1his.sparepartrequired = request.POST.get('sparepartrequired')
        #     product1his.sparepartitemrequired = request.POST.get('sparepartitemrequired')
        #     product1his.remarks = request.POST.get('remarks1')
        #     product1his.save()
            
        #     try:
        #         msg = f"New Product Add Successfully"
        #         alert = Alert(msg=msg,empid=request.user,clientid=clientid,status='1')
        #         alert.save()
        #         # msg_plain = render_to_string('email.txt')
        #         # msg = render_to_string('email/register.html',{'email':email,'company':client,'modelnumber':modelnumber})
        #         # send_mail('Equipment record is  added on portal.', msg_plain, settings.EMAIL_HOST_USER, [email],html_message = msg) # user 
        #         # send_mail('Equipment record is  added on portal.', msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msg) #  Admin
        #     except:
        #         pass
        #     return JsonResponse({'status':1})
        # elif product == '2':
            # hosepipe = request.POST.get('hosepipe')
            # hydrantvalve = request.POST.get('hydrantvalve')
            # blackcap = request.POST.get('blackcap')
            # shuntwheel = request.POST.get('shuntwheel')
            # hosebox = request.POST.get('hosebox')
            # hoses = request.POST.get('hoses')
            # Glasses2 = request.POST.get('Glasses2')
            # branchpipe = request.POST.get('branchpipe')
            # fire_hydrant_keys = request.POST.get('fire_hydrant_keys')
            # glasshammer = request.POST.get('glasshammer')
            # observation2 = request.POST.get('observation2')
            # action2 = request.POST.get('action2')
            # sparepartrequired = request.POST.get('sparepartrequired')
            # sparepartitemrequired = request.POST.get('sparepartitemrequired')
            # remarks = request.POST.get('remarks1')
            # product2 = FireHydrant(smpid=pmp,empid=empid,clientid=clientid,hosepipe=hosepipe,hydrantvalve=hydrantvalve,blackcap=blackcap,shuntwheel=shuntwheel,hosebox=hosebox,
            # hoses=hoses,glasses=Glasses2,branchpipe=branchpipe,fire_hydrant_keys=fire_hydrant_keys,glasshammer=glasshammer,observation=observation2,action=action2,remarks=remarks,sparepartrequired=sparepartrequired,sparepartitemrequired=sparepartitemrequired)
            # product2.save()
            # product2his = FireHydrantHistory(smpid=pmp,empid=empid,clientid=clientid,hosepipe=hosepipe,hydrantvalve=hydrantvalve,blackcap=blackcap,shuntwheel=shuntwheel,hosebox=hosebox,
            # hoses=hoses,glasses=Glasses2,branchpipe=branchpipe,fire_hydrant_keys=fire_hydrant_keys,glasshammer=glasshammer,observation=observation2,action=action2,remarks=remarks,sparepartrequired=sparepartrequired,sparepartitemrequired=sparepartitemrequired)
            # product2his.save()
            # return JsonResponse({'status':1})
    else:
        smpid = request.GET.get('smpid')
        smp = SiteModelProduct.objects.get(id=smpid)
        products = Product.objects.all()
        employees = User.objects.filter(user_type='1')
        clients = User.objects.filter(user_type='2')
        return render(request, 'mfire/update-product.html',{'smp':smp,'products':products,'clients':clients,'employees':employees})

@login_required(login_url='/mfire/login/')
def allclient(request):
    UserModel = get_user_model()
    products = Product.objects.all()
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/all_client.html',{'products':products,'clients':clients})

def updateclint(request):
    UserModel = get_user_model()
    if request.method == 'POST':
        user_id = request.POST.get('user_id')
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        phone = request.POST.get('phone')
        company = request.POST.get('company')
        email = request.POST.get('email')
        user_type = request.POST.get('user_type')
        address = request.POST.get('address')
        location = request.POST.getlist('location[]')
        UserModel.objects.filter(id=user_id).update(first_name=first_name,last_name=last_name,phone=phone,company=company,email=email,user_type=user_type,location=address)
        for i in location:
            if ClientLocation.objects.filter(client_id=user_id,cl_location=i):
                user = User.objects.get(id=user_id)
                created = ClientLocation.objects.get(client_id=user,cl_location=i)
                created.cl_location=i
                created.save()
            else:
                user = User.objects.get(id=user_id)
                created = ClientLocation(client_id=user,cl_location=i)
                created.save()
        messages.success(request, 'Update Success.')
        return redirect('/mfire/all-Officer/')
    else:
        cl_id = request.GET.get('cl_id')
        products = Product.objects.all()
        clients = UserModel.objects.get(id=cl_id)
        return render(request,'mfire/add_client.html',{'products':products,'clients':clients})
    
def deleteclientlocation(request):
    u = request.GET.get('u')
    l = request.GET.get('l')
    user = ClientLocation.objects.get(client_id=u,id=l)
    user.delete()
    messages.success(request, 'Detele Location Success.')
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
                
@login_required(login_url='/mfire/login/')
def addclient(request):
    products = Product.objects.all()
    return render(request,'mfire/add_client.html',{'products':products})


@transaction.atomic
@login_required(login_url='/mfire/login/')
def bulkproduct(request):
    try:
        if request.method == 'POST':
            product = request.POST.get('product')
            fetype = request.POST.get('fetype')
            employee = request.POST.get('employee')
            file = request.FILES.get('myfile')
            UserModel = get_user_model()
            productid = Product.objects.get(id=product)
            if not file.name.endswith(('xlsx', 'xlsm')):                                          
                messages.success(request, 'Incorrect File Format, Upload aborted')
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            if product == '10':
                empid = UserModel.objects.get(id=employee)
                d = pd.read_excel(file,skiprows=0)#,parse_dates=['mfgyear','dateofht','duedateht','dateofoverhauling','duedateoverhauling','duedatediscard'])
                if fetype == 'FE36':
                    for x in d.values:
                        if str(x[4]).lower() == 'missing' or str(x[4]).lower() == 'nan' or str(x[4]).lower() == 'nat':
                            x[4] = None
                        if str(x[8]).lower() == 'missing' or str(x[8]).lower() == 'nan' or str(x[8]).lower() == 'nat':
                            x[8] = None
                        if str(x[5]).lower() == 'missing' or str(x[5]).lower() == 'nan' or str(x[5]).lower() == 'nat':
                            x[5] = None
                        if str(x[7]).lower() == 'missing' or str(x[7]).lower() == 'nan' or str(x[7]).lower() == 'nat':
                            x[7] = None
                        
                        randn = str(random.randint(11,99999999))
                        eid = str(employee)
                        daten = str(datetime.datetime.now().strftime ("%Y%m%d"))
                        modelnumber = daten+''+randn+''+eid
                        mod = SiteModelProduct.objects.filter(modelno=modelnumber)
                        if mod:
                            pass
                        else:
                            pmp = SiteModelProduct(modelno=modelnumber,empid=empid,pid=productid,location=x[9],unit=x[10])
                            pmp.save()
                            product10 = FireExtinguisherHPCL(smpid=pmp,empid=empid,FEType=fetype,extgno=x[0],cylinderno=x[1],make=x[2],capacity=x[3],mfgyear=x[4],dateofht=x[5],certificateno=x[6],duedateht=x[7],duedatediscard=x[8],engg_comment=x[11],health='ok')
                            product10.save()
                    messages.success(request, 'Upload Success.')
                    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
                if fetype == 'CO2':
                    for x in d.values:
                        if str(x[3]).lower() == 'missing' or str(x[3]).lower() == 'nan' or str(x[3]).lower() == 'nat':
                            x[3] = None
                        if str(x[5]).lower() == 'missing' or str(x[5]).lower() == 'nan' or str(x[5]).lower() == 'nat':
                            x[5] = None
                        if str(x[7]).lower() == 'missing' or str(x[7]).lower() == 'nan' or str(x[7]).lower() == 'nat':
                            x[7] = None
                        randn = str(random.randint(11,99999999))
                        eid = str(employee)
                        daten = str(datetime.datetime.now().strftime ("%Y%m%d"))
                        modelnumber = daten+''+randn+''+eid
                        mod = SiteModelProduct.objects.filter(modelno=modelnumber)
                        if mod:
                            pass
                        else:
                            pmp = SiteModelProduct(modelno=modelnumber,empid=empid,pid=productid,location=x[8],unit=x[9])
                            pmp.save()
                            product10 = FireExtinguisherHPCL(smpid=pmp,empid=empid,FEType=fetype,extgno=x[0],make=x[1],cylinderno=x[2],mfgyear=x[3],capacity=x[4],dateofht=x[5],certificateno=x[6],duedateht=x[7],engg_comment=x[10],health='ok')
                            product10.save()
                    messages.success(request, 'Upload Success.')
                    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
                if fetype == 'DCP':
                    for x in d.values:
                        if str(x[3]).lower() == 'missing' or str(x[3]).lower() == 'nan' or str(x[3]).lower() == 'nat':
                            x[3] = None
                        if str(x[4]).lower() == 'missing' or str(x[4]).lower() == 'nan' or str(x[4]).lower() == 'nat':
                            x[4] = None
                        if str(x[6]).lower() == 'missing' or str(x[6]).lower() == 'nan' or str(x[6]).lower() == 'nat':
                            x[6] = None
                        if str(x[7]).lower() == 'missing' or str(x[7]).lower() == 'nan' or str(x[7]).lower() == 'nat':
                            x[7] = None
                        if str(x[8]).lower() == 'missing' or str(x[8]).lower() == 'nan' or str(x[8]).lower() == 'nat':
                            x[8] = None
                        if str(x[9]).lower() == 'missing' or str(x[9]).lower() == 'nan' or str(x[9]).lower() == 'nat':
                            x[9] = None
                        randn = str(random.randint(11,99999999))
                        eid = str(employee)
                        daten = str(datetime.datetime.now().strftime ("%Y%m%d"))
                        modelnumber = daten+''+randn+''+eid
                        mod = SiteModelProduct.objects.filter(modelno=modelnumber)
                        if mod:
                            pass
                        else:
                            pmp = SiteModelProduct(modelno=modelnumber,empid=empid,pid=productid,location=x[11],unit=x[12])
                            pmp.save()
                            product10 = FireExtinguisherHPCL(smpid=pmp,empid=empid,FEType=fetype,extgno=x[0],make=x[1],cylinderno=x[2],mfgyear=x[3],dateofht=x[4],certificateno=x[5],duedateht=x[6],dateofoverhauling=x[7],duedateoverhauling=x[8],duedatediscard=x[9],capacity=x[10],engg_comment=x[13],health='ok')
                            product10.save()
                    messages.success(request, 'Upload Success.')
                    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            elif product == '11':
                d = pd.read_excel(file,skiprows=3)
                for x in d.values:
                    randn = str(random.randint(11,99999999))
                    daten = str(datetime.datetime.now().strftime ("%Y%m%d"))
                    modelnumber = daten+''+randn
                    mod = SiteModelProduct.objects.filter(modelno=modelnumber)
                    if mod:
                        pass
                    else:
                        pmp = SiteModelProduct(modelno=modelnumber,pid=productid,location=x[8],unit=x[9])
                        pmp.save()
                        product11 = FireHydrantHPCL(smpid=pmp,hydrantno=x[0],size3=x[1],size4=x[2],size3s=x[3],monitor=x[4],leftsidelvgv=x[5],rightsidelvgv=x[6],hydrantblockvalve=x[7],offsiteunitarea=x[10],engg_comment=x[11],health='ok')
                        product11.save()
                messages.success(request, 'Upload Success.')
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            else:
                messages.success(request, 'Something Wrong.')
                return render(request,'mfire/product_bulk_upload.html')
        else:
            UserModel = get_user_model()
            employees = UserModel.objects.filter(user_type='1')
            clients = UserModel.objects.filter(user_type='2')
            products = Product.objects.all()
            return render(request,'mfire/product_bulk_upload.html',{'products':products,'clients':clients,'employees':employees})
    except Exception as e:
        # Roll back the transaction
        transaction.set_rollback(True)
        messages.success(request, f'Error: {e}')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    
@login_required(login_url='/mfire/login/')
def admindeshboard(request):
    if request.user.is_staff:
        UserModel = get_user_model()
        employees = UserModel.objects.filter(user_type='1').count()
        clients = UserModel.objects.filter(user_type='2').count()
        products = Product.objects.all()
        return render(request,'mfire/deshboard.html',{'products':products,'clients':clients,'employees':employees})
    else:
        return redirect('/')
    
@login_required(login_url='/mfire/login/')
def history_report(request):
    fetype = request.GET.get('fetype')
    pid = request.GET.get('pid')
    if pid == '11':
        productreports = SiteModelProduct.objects.filter(pid=11).order_by('id')
    elif pid == '10':
        productreports = SiteModelProduct.objects.filter(pid=10,FireExtinguisherHPCL_smpid__FEType=fetype).order_by('id')
    else:
        productreports = SiteModelProduct.objects.all().order_by('id')
    products = Product.objects.all()
    paginator = Paginator(productreports, 500)  # Show 10 row per page.
    page_number = request.GET.get("page")
    page_obj = paginator.get_page(page_number)
    UserModel = get_user_model()
    employees = UserModel.objects.filter(user_type='1')
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/report.html',{'products':products,'clients':clients,'employees':employees,'page_obj':page_obj,'pid':pid,'fetype':fetype})

@csrf_exempt
def updatemodellocation(request):
    if request.method == 'POST':
        model_no = request.POST.get('model_no')
        smpid = request.POST.get('smpid')
        location = request.POST.get('location')
        status = request.POST.get('status')
        if SiteModelProduct.objects.filter(modelno=model_no).exclude(id=smpid,modelno=model_no).exists():
            return JsonResponse({'msg':'already exist'})
        else:
            try:
                smpidpro = SiteModelProduct.objects.get(modelno=model_no)
                msg = f"Product update Successfully Model No. is {model_no}"
                alert = Alert(msg=msg,empid=request.user,clientid=smpidpro.clientid,status='1')
                alert.save()
                # msg_plain = render_to_string('email.txt')
                # msg = render_to_string('email/update.html',{'company':smpidpro.clientid.company,'first_name':smpidpro.clientid.first_name,'last_name':smpidpro.clientid.last_name})
                # send_mail('Welcome to the Fire Inspector portal, here details of Update', msg_plain, settings.EMAIL_HOST_USER, [smpidpro.clientid.email],html_message = msg) # user 
                # send_mail('Welcome to the Fire Inspector portal, here details of Update', msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msg) #  Admin
            except:
                pass
            SiteModelProduct.objects.filter(id=smpid).update(modelno=model_no,location=location,status=status)
            return JsonResponse({'msg':'success'})
    return JsonResponse({'msg':'Some Thing Wrong'})
    
    
@login_required(login_url='/mfire/login/')
def qr_ganerate(request):
    if request.user.is_staff:
        model_no = request.GET.get('model_no', '')
        model_no_values = model_no.split(',')
        products = SiteModelProduct.objects.filter(modelno__in=model_no_values)
        return render(request,'mfire/qr_ganerate.html',{'products':products})
        
def pdisable(request):
    id = request.GET.get('smpid')
    status = request.GET.get('status')
    if id is not None:
        smpid = SiteModelProduct.objects.get(id=id)
        smpid.disable = status
        smpid.save()
        messages.success(request, 'Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        messages.success(request, 'Something Wrong Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        
from django.http import HttpResponse
from django.template.loader import get_template
from django.views.decorators.csrf import csrf_exempt
from xhtml2pdf import pisa
from io import BytesIO


@csrf_exempt
def DownloadQRCode(request):
    if request.method == "POST":
        model_no = request.POST.get('model_no', '')
        model_no_values = model_no.split(',')
        products = SiteModelProduct.objects.filter(modelno__in=model_no_values).order_by('id')
        info = {'products': products}
        template = get_template('mfire/qr_ganerate_pdf.html')
        html = template.render(info)
        result = BytesIO()
        pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result)

        if pdf.err:
            # Log the error for debugging
            print(f"Error generating PDF: {pdf.err}")
            return HttpResponse('Error generating PDF', status=500)

        response = HttpResponse(result.getvalue(), content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="generated_qr_codes.pdf"'  # Set attachment disposition
        print('s')
        return response
    else:
        return HttpResponse('Method not allowed', status=405)


    
    
@login_required(login_url='/mfire/login/')
def model_history(request):
    if request.user.is_staff:
        products = Product.objects.all()
        id = request.GET.get('pro_id')
        smpid = request.GET.get('smpid')
        client_id = request.GET.get('client_id')
        if id == '1':
            product1 = SiteModelProductDetailHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product1':product1})
        elif id == '2':
            product2 = FireHydrantHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product2':product2})
        elif id == '3':
            product3 = HoseReelHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product3':product3})
        elif id == '4':
            product4 = FireBucketHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product4':product4})
        elif id == '5':
            product5 = FirePumpHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product5':product5})
        elif id == '6':
            product6 = FireDetectionHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product6':product6})
        elif id == '7':
            product7 = PortableMonitorHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product7':product7})
        elif id == '8':
            product8 = SuppresionSystemHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product8':product8})
        elif id == '9':
            product9 = ControlValveHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product9':product9})
        elif id == '10':
            product10 = FireExtinguisherHPCL.objects.filter(smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product10':product10})
        elif id == '11':
            product11 = FireHydrantHPCL.objects.filter(smpid=smpid)
            return render(request,'mfire/model_history.html',{'products':products,'product11':product11})
        else:
            messages.success(request, 'Something Wrong.')
            return render(request,'mfire/model_history.html')
            
            
def service_report(request):
    try:
        pid = request.GET.get('pid')
        id = request.GET.get('id')
        products = Product.objects.all()
        if pid == '5':
            service = FirePumpService.objects.filter(fire_pump_id=id)
            if service:
                for s in service:
                    details_lable = s.details_lable
                    service_location = s.service_location
                    qty_required = s.qty_required
                    service_remarks = s.service_remarks
                    a = details_lable.split(',')
                    b = service_location.split(',')
                    c = qty_required.split(',')
                    d = service_remarks.split(',')
                    zippedList = zip(a, b, c, d)
                return render(request,'mfire/service_report.html',{'list':zippedList,'products':products,'pid':pid,'id':id})
            else:
                return render(request,'mfire/service_report.html',{'list':service,'products':products})
        elif pid == '6':
            service = FireDetectionService.objects.filter(fire_detection_id=id)
            if service:
                for s in service:
                    details_lable = s.details_lable
                    service_location = s.service_location
                    qty_required = s.qty_required
                    service_remarks = s.service_remarks
                    a = details_lable.split(',')
                    b = service_location.split(',')
                    c = qty_required.split(',')
                    d = service_remarks.split(',')
                    zippedList = zip(a, b, c, d)
                return render(request,'mfire/service_report.html',{'list':zippedList,'products':products,'pid':pid,'id':id})
            else:
                return render(request,'mfire/service_report.html',{'list':service,'products':products})
        elif pid == '8':
            service = SuppresionSystemService.objects.filter(suppresion_system_id=id)
            if service:
                for s in service:
                    details_lable = s.details_lable
                    service_location = s.service_location
                    qty_required = s.qty_required
                    service_remarks = s.service_remarks
                    a = details_lable.split(',')
                    b = service_location.split(',')
                    c = qty_required.split(',')
                    d = service_remarks.split(',')
                    zippedList = zip(a, b, c, d)
                return render(request,'mfire/service_report.html',{'list':zippedList,'products':products,'pid':pid,'id':id})
            else:
                return render(request,'mfire/service_report.html',{'list':service,'products':products})
        else:
            messages.success(request, 'Something Wrong.')
            return redirect('/mfire/dashboard/')
    except:
        messages.success(request, 'Something Wrong.')
        return redirect('/mfire/dashboard/')
            

#SELECT mfire_sitemodelproduct.clientid_id,mfire_sitemodelproduct.modelno,mfire_sitemodelproduct.createdate, mfire_sitemodelproduct.pid_id, mfire_clientlocation.cl_location FROM `mfire_sitemodelproduct` INNER JOIN mfire_clientlocation ON mfire_clientlocation.client_id_id=8 WHERE Month(createdate) = 6 AND clientid_id=8 AND mfire_clientlocation.id = 6

def monthly_report(request):
    products = Product.objects.all()
    productreports = SiteModelProduct.objects.all()
    paginator = Paginator(productreports, 10)  # Show 10 row per page.
    page_number = request.GET.get("page")
    page_obj = paginator.get_page(page_number)
    UserModel = get_user_model()
    employees = UserModel.objects.filter(user_type='1')
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/monthly-report.html',{'products':products,'clients':clients,'employees':employees,'page_obj':page_obj})

@login_required(login_url='/mfire/login/')
def get_client_month_report(request):
    try:
        if request.user.is_staff:
            products = Product.objects.all()
            id = request.GET.get('prd_id')
            reportrange = request.GET.get('reportrange')
            empid = request.GET.get('empid')
            start_date, end_date = map(lambda x: datetime.datetime.strptime(x.strip(), '%d/%m/%y').date(), reportrange.split('-'))
            UserModel = get_user_model()
            # return HttpResponse(start_date)
            employees = UserModel.objects.filter(user_type='1')
            clients = UserModel.objects.filter(user_type='2')
            if id == 'DCP':
                if empid:
                    model_no_values = SiteModelProduct.objects.filter(empid__id=empid,pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, empid__id=empid, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record: 
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
                else:
                    model_no_values = SiteModelProduct.objects.filter(pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record: 
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
                
            elif id == 'CO2':
                if empid:
                    model_no_values = SiteModelProduct.objects.filter(empid__id=empid,pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, empid__id=empid, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record:
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
                else:
                    model_no_values = SiteModelProduct.objects.filter(pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record:
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
            
            elif id == 'FE36':
                if empid:
                    model_no_values = SiteModelProduct.objects.filter(empid__id=empid,pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, empid__id=empid, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record:
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
                else:
                    model_no_values = SiteModelProduct.objects.filter(pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, createdate__gte=start_date, createdate__lte=end_date,FEType=id).order_by('-id')[:1]
                        for nr in latest_record:
                            product1.append(nr)
                    return render(request,'mfire/get_client_month_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
            
            elif id == '11':
                model_no_values = SiteModelProduct.objects.filter(pid=11)
                product2 = []
                for i in model_no_values:
                    latest_record = FireHydrantHPCL.objects.filter(smpid__modelno=i.modelno, createdate__gte=start_date, createdate__lte=end_date).order_by('-id')[:1]
                    for nr in latest_record:
                        product2.append(nr)
                return render(request,'mfire/get_client_month_report.html',{'products':products,'product2':product2,'clients':clients,'employees':employees})
        else:
            return redirect('/')
    except:
        messages.success(request, 'Something Wrong.')
        return redirect('/mfire/report/monthly-report/')
        

        
    # End monthly report
        
    # gap report
    
def gap_analysis_report(request):
    products = Product.objects.all()
    productreports = SiteModelProduct.objects.all()
    paginator = Paginator(productreports, 10)  # Show 10 row per page.
    page_number = request.GET.get("page")
    page_obj = paginator.get_page(page_number)
    UserModel = get_user_model()
    employees = UserModel.objects.filter(user_type='1')
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/gap-report.html',{'products':products,'clients':clients,'employees':employees,'page_obj':page_obj})

@login_required(login_url='/mfire/login/')
def filter_gap_analysis_report(request):
    try:
        if request.user.is_staff:
            products = Product.objects.all()
            id = request.GET.get('prd_id')
            empid = request.GET.get('empid')
            reportrange = request.GET.get('reportrange')
            UserModel = get_user_model()
            employees = UserModel.objects.filter(user_type='1')
            clients = UserModel.objects.filter(user_type='2')
            start_date, end_date = map(lambda x: datetime.datetime.strptime(x.strip(), '%d/%m/%y'), reportrange.split('-'))
            #if id == 'DCP':
            if id == '11':
                model_no_values = SiteModelProduct.objects.filter(pid=11)
                product2 = []
                for i in model_no_values:
                    latest_record = FireHydrantHPCL.objects.filter(smpid__modelno=i.modelno,createdate__gte=start_date, createdate__lte=end_date).order_by('-id')[:1]
                    for nr in latest_record:
                        if nr.health is not None:
                            if nr.health.lower() == 'not ok':
                                product2.append(nr)
                return render(request,'mfire/filter_gap_analysis_report.html',{'products':products,'product2':product2,'pid':id,'clients':clients,'employees':employees})
            else:
                if empid:
                    model_no_values = SiteModelProduct.objects.filter(empid__id=empid,pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, empid__id=empid,FEType=id,createdate__gte=start_date, createdate__lte=end_date).order_by('-id')[:1]
                        for nr in latest_record: 
                            if nr.health is not None:
                                if nr.health.lower() == 'not ok':
                                    product1.append(nr)
                    return render(request,'mfire/filter_gap_analysis_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
                else:
                    model_no_values = SiteModelProduct.objects.filter(pid=10)
                    product1 = []
                    for i in model_no_values:
                        latest_record = FireExtinguisherHPCL.objects.filter(smpid__modelno=i.modelno, FEType=id,createdate__gte=start_date, createdate__lte=end_date).order_by('-id')[:1]
                        for nr in latest_record: 
                            if nr.health is not None:
                                if nr.health.lower() == 'not ok':
                                    product1.append(nr)
                    return render(request,'mfire/filter_gap_analysis_report.html',{'products':products,'product1':product1,'pid':id,'clients':clients,'employees':employees})
        else:
            return redirect('/')
    except:
        return redirect('/mfire/report/gap-analysis/')
                              
@login_required(login_url='/mfire/login/')        
def client_product(request):
    client = request.GET.get('client')
    products = Product.objects.all()
    productreports = SiteModelProduct.objects.filter(clientid=client)
    UserModel = get_user_model()
    employees = UserModel.objects.filter(user_type='1')
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'mfire/client_product.html',{'products':products,'clients':clients,'employees':employees,'productreports':productreports})
    
@login_required(login_url='/mfire/login/')
def adminproduct(request):
    if request.user.is_staff:
        products = Product.objects.all()
        id = request.GET.get('pro_id')
        pro_id = Product.objects.filter(id=id)
        alproducts = SiteModelProduct.objects.filter(pid=id)
        return render(request, 'mfire/products.html', {'alproducts':alproducts,'products':products,'pro_id':pro_id})
    else:
        return redirect('/')
        
def check_list(request):
    if request.user.is_staff:
        products = Product.objects.all()
        id = request.GET.get('pro_id')
        pro_id = Product.objects.filter(id=id)
        alproducts = SiteModelProduct.objects.filter(pid=id)
        return render(request, 'mfire/check-list.html', {'alproducts':alproducts,'products':products,'pro_id':pro_id})
    else:
        return redirect('/')
        
    ##
    
def materialvalue(request):
    m = request.GET.get('m')
    mvalue = materialform.objects.get(material=m)
    mv = mvalue.c_value
    return JsonResponse({'mv':mv})
    #return render(request,'load_data.html',{'clients':clients})
    
def materialadd(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        value = request.POST.get('value')
        materials = materialform(material=name, c_value=value)
        materials.save()
        messages.success(request, 'Register Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        materials = materialform.objects.all()
        return render(request,'mfire/materialadd.html',{'products':products,'materials':materials})
        
    
def fireloadcalc(request):
    if request.method == 'POST':
        Material = request.POST.get('Material')
        c_value = request.POST.get('Calorific')
        length = request.POST.get('length')
        width = request.POST.get('width')
        height = request.POST.get('height')
        quantity = request.POST.get('mquantitties')
        subarea = request.POST.get('subarea')
        area = request.POST.get('area')
        areasqrmtr = request.POST.get('areasqrmtr')
        flv = request.POST.get('flv')
        city = request.POST.get('city')
        state = request.POST.get('state')
        zone = request.POST.get('zone')
        thrishul = request.POST.get('thrishul')
        grade = request.POST.get('grade')
        hours = request.POST.get('hours')
        staff = staffform(type_material=Material, c_value=c_value, length=length, width=width, height=height, quantity=quantity,areasqrmtr=areasqrmtr,area=area,
                            sub_area=subarea,flv=flv,thrishul=thrishul,grade=grade,hours=hours,city=city,state=state,zone=zone)
        staff.save()
        messages.success(request, 'Register Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        materials = materialform.objects.all()
        thrishuls = thrishulform.objects.all()
        return render(request,'mfire/fireloadcalc.html',{'products':products,'materials':materials,'thrishuls':thrishuls})
        
def thrishul(request):
    if request.method == 'POST':
        thrishul = request.POST.get('thrishul')
        grade = request.POST.get('grade')
        grade = request.POST.get('grade')
        hours = request.POST.get('hours')
        materials = thrishulform(thrishul=thrishul, grade=grade,hours=hours)
        materials.save()
        messages.success(request, 'Register Success.')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        thrishuls = thrishulform.objects.all()
        return render(request,'mfire/thrishul.html',{'products':products,'thrishuls':thrishuls})
        

def car_parking(request): 
    if request.method == 'POST':
        length = request.POST.get('length')
        width = request.POST.get('width')
        height = request.POST.get('height')
        area = request.POST.get('area')
        ach = request.POST.get('ach')
        ExAir = request.POST.get('ExAir')
        FA = request.POST.get('FA')
        cararking = CarParking(length=length, width=width, height=height, area=area, ach=ach,ExAir=ExAir,FA=FA)
        cararking.save()
        messages.success(request, 'Data Add Success.')        
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        return render(request,'mfire/car_parking.html',{'products':products})
    
def smoke_ventilation(request): 
    if request.method == 'POST':
        Actual_HRR = request.POST.get('Actual_HRR')
        Ceilling_area = request.POST.get('Ceilling_area')
        NDheightHRR = request.POST.get('NDheightHRR')
        smokelayerheight = request.POST.get('smokelayerheight')
        NonDiamentionalheight_y = request.POST.get('NonDiamentionalheight_y')
        mquantitties = request.POST.get('mquantitties')
        Tau = request.POST.get('Tau')
        Accelerationduegravity = request.POST.get('Accelerationduegravity')
        lenghtofroom = request.POST.get('lenghtofroom')
        widthofroom = request.POST.get('widthofroom')
        floorarea = request.POST.get('floorarea')
        ttfctslheight = request.POST.get('ttfctslheight')
        cararking = SmokeVentilation(Actual_HRR=Actual_HRR, Ceilling_area=Ceilling_area, NDheightHRR=NDheightHRR, smokelayerheight=smokelayerheight, NonDiamentionalheight_y=NonDiamentionalheight_y,
                    mquantitties=mquantitties,Tau=Tau,Accelerationduegravity=Accelerationduegravity,lenghtofroom=lenghtofroom,widthofroom=widthofroom,floorarea=floorarea,ttfctslheight=ttfctslheight)
        cararking.save()
        messages.success(request, 'Data Add Success.')        
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        return render(request,'mfire/smoke_ventilation.html',{'products':products})
    
def mechanical_ventilation(request): 
    if request.method == 'POST':
        layerheight = request.POST.get('layerheight')
        fire_size = request.POST.get('fire_size')
        pfrate = request.POST.get('pfrate')
        HGLtemp = request.POST.get('HGLtemp')
        firesizeQ = request.POST.get('firesizeQ')
        specificheat = request.POST.get('specificheat')
        heattransfercoeff = request.POST.get('heattransfercoeff')
        Compartmentlength = request.POST.get('Compartmentlength')
        Compartmentwidth = request.POST.get('Compartmentwidth')
        Compartmentheight = request.POST.get('Compartmentheight')
        areaodwalls = request.POST.get('areaodwalls')
        HCLTemparature = request.POST.get('HCLTemparature')
        densityHGLrho = request.POST.get('densityHGLrho')
        fanflowrate_v_e = request.POST.get('fanflowrate_v_e')
        fanflowrate_ve = request.POST.get('fanflowrate_ve')
        cararking = MechanicalVentilation(layerheight=layerheight, fire_size=fire_size, pfrate=pfrate, HGLtemp=HGLtemp, firesizeQ=firesizeQ,specificheat=specificheat,heattransfercoeff=heattransfercoeff,
                    Compartmentlength=Compartmentlength,Compartmentwidth=Compartmentwidth,Compartmentheight=Compartmentheight,areaodwalls=areaodwalls,HCLTemparature=HCLTemparature,densityHGLrho=densityHGLrho,
                    fanflowrate_v_e=fanflowrate_v_e,fanflowrate_ve=fanflowrate_ve)
        cararking.save()
        messages.success(request, 'Data Add Success.')        
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        products = Product.objects.all()
        return render(request,'mfire/mechanical_ventilation.html',{'products':products})

def c_inspection(request):
    products = Product.objects.all()
    comins = CompanyInspection.objects.all()
    return render(request,'mfire/c_inspection.html',{'comins':comins,'products':products})
    
def add_inspection(request):
    if request.method == 'POST':
        client = request.POST.get('client')
        employee = request.POST.get('employee')
        assignemp = User.objects.get(id=employee)
        clientid = User.objects.get(id=client)
        message = request.POST.get('message')
        inspection_date = request.POST.get('inspection_date')
        comins = CompanyInspection(clientid=clientid,assignemp=assignemp,message=message,status='Pendding',inspection_date=inspection_date)
        comins.save()
        msgs = f"{clientid.company} Company Inspection Date {inspection_date} <br> Message = {message}."
        alert = Alert(msg=msgs,empid=assignemp,clientid=clientid,status='1')
        alert.save()
        try:
            msg_plain = render_to_string('email.txt')
            #msg = render_to_string('email/ticke.html',{'c_name':clint_name,'msg':message,'modelno':modelno,'ticketno':tickets_id})
            subject = f'Company Inspecton Date Created'
            send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, [clientid.email,assignemp.email],html_message = msgs)
            send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msgs)
        except:
            pass
        return JsonResponse({'status':'success'})
    else:
        allemp = User.objects.filter(user_type='1')
        clients = User.objects.filter(user_type='2')
        products = Product.objects.all()
        context = {'allemp':allemp,'clients':clients,'products':products}
        return render(request,'mfire/add_inspection.html', context)
    
    
    #client
    
@login_required(login_url='/vendor/login/')
def clientdeshboard(request):
    if request.user.user_type == '2':
        products = Product.objects.all()
        p1 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=1)
        p2 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=2)
        p3 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=3)
        p4 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=4)
        p5 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=5)
        p6 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=6)
        p7 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=7)
        p8 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=8)
        p9 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=9)
        return render(request,'vendor/deshboard.html',{'products':products,'p1':p1,'p2':p2,'p3':p3,'p4':p4,'p5':p5,'p6':p6,'p7':p7,'p8':p8,'p9':p9})
    else:
        return redirect('/')
        
    
def clientlogin(request):
    try:
        if request.user.is_authenticated:
            return redirect('/vendor/dashboard/')
        if request.method == "POST":
            form = LogInForm(request.POST)
            if form.is_valid():
                email = form.cleaned_data["email"]
                password = form.cleaned_data["password"]
                user = authenticate(email=email, password=password)
                if user:
                    if user.user_type == '2':
                        login(request, user)
                        return redirect('/vendor/')
                    else:
                        messages.error(request, 'You Are Not Eligible For Login')
                else:
                    messages.error(request, 'wrong email and password ....') 
        else:
            form = LogInForm()
    
        return render(request, 'vendor/login.html', {'form': form})
    except:
        return redirect('/')
        
@login_required(login_url='/vendor/login/')
def vendorhomepage(request):
    staffforms = staffform.objects.all()
    smokeventilation = SmokeVentilation.objects.all()
    mechnicalventilation = MechanicalVentilation.objects.all()
    carparking = CarParking.objects.all()
    tickets = SupportTickets.objects.filter(clientid=request.user.id) 
    products = Product.objects.all()
    allemp = User.objects.filter(user_type='1')
    alerts = Alert.objects.filter(clientid=request.user.id,status='1').order_by('-id')
    p1 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=1)
    p2 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=2)
    p3 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=3)
    p4 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=4)
    p5 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=5)
    p6 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=6)
    p7 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=7)
    p8 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=8)
    p9 = SiteModelProduct.objects.filter(clientid=request.user.id,pid=9)
    context = {'staffforms':staffforms, 'smokeventilation':smokeventilation, 'mechnicalventilation':mechnicalventilation, 'carparking':carparking,'alerts':alerts,
                'products':products,'tickets':tickets,'allemp':allemp,'p1':p1,'p2':p2,'p3':p3,'p4':p4,'p5':p5,'p6':p6,'p7':p7,'p8':p8,'p9':p9}
    return render(request,'vendor/index.html',context)
    
def alertchange(request):
    try:
        id = request.GET.get('id')
        alert = Alert.objects.get(id=id)
        alert.status = '0'
        alert.save()
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    except:
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    
@login_required(login_url='/vendor/login/')
def fire_calculation(request):
    staffforms = staffform.objects.all()
    smokeventilation = SmokeVentilation.objects.all()
    mechnicalventilation = MechanicalVentilation.objects.all()
    carparking = CarParking.objects.all()
    context = {'staffforms':staffforms, 'smokeventilation':smokeventilation, 'mechnicalventilation':mechnicalventilation, 'carparking':carparking}
    return render(request,'vendor/firecalc.html',context)

@login_required(login_url='/vendor/login/')
def clientregister(request):
    return render(request,'vendor/register.html')
    
@login_required(login_url='/vendor/login/')
def clientproduct(request):
    if request.user.user_type == '2':
        products = Product.objects.all()
        id = request.GET.get('pro_id')
        alproducts = SiteModelProduct.objects.filter(pid=id,clientid=request.user.id)
        return render(request, 'vendor/products.html', {'alproducts':alproducts,'products':products})
    else:
        return redirect('/')
    

@login_required(login_url='/vendor/login/')
def clientreport(request):
    products = Product.objects.all()
    productreports = SiteModelProduct.objects.filter(clientid=request.user.id,disable=0)
    UserModel = get_user_model()
    employees = UserModel.objects.filter(user_type='1')
    clients = UserModel.objects.filter(user_type='2')
    return render(request,'vendor/reports.html',{'products':products,'clients':clients,'employees':employees,'productreports':productreports})

@login_required(login_url='/vendor/login/')
def cl_model_history(request):
    if request.user.user_type == '2':
        products = Product.objects.all()
        id = request.GET.get('pro_id')
        smpid = request.GET.get('smpid')
        client_id = request.GET.get('client_id')
        if id == '1':
            product1 = SiteModelProductDetailHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product1':product1})
        elif id == '2':
            product2 = FireHydrantHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product2':product2})
        elif id == '3':
            product3 = HoseReelHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product3':product3})
        elif id == '4':
            product4 = FireBucketHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product4':product4})
        elif id == '5':
            product5 = FirePumpHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product5':product5})
        elif id == '6':
            product6 = FireDetectionHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product6':product6})
        elif id == '7':
            product7 = PortableMonitorHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product7':product7})
        elif id == '8':
            product8 = SuppresionSystemHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product8':product8})
        elif id == '9':
            product9 = ControlValveHistory.objects.filter(smpid__clientid=client_id,smpid=smpid)
            return render(request,'vendor/model_history.html',{'products':products,'product9':product9})
    else:
        return redirect("/vendor/dashboard/")
   
@login_required(login_url='/vendor/login/')
def cl_get_client_month_report(request):
    try:
        if request.user.user_type == '2':
            products = Product.objects.all()
            id = request.GET.get('prd_id')
            month = request.GET.get('month')
            client_id = request.GET.get('client')
            location = request.GET.get('location')
            UserModel = get_user_model()
            employees = UserModel.objects.filter(user_type='1')
            clients = UserModel.objects.filter(user_type='2')
            if id == '1':
                product1 = SiteModelProductDetailHistory.objects.raw("SELECT * FROM mfire_sitemodelproductdetailhistory INNER JOIN mfire_sitemodelproduct ON mfire_sitemodelproductdetailhistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_sitemodelproductdetailhistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product1':product1,'clients':clients,'employees':employees})
            elif id == '2':
                product2 = FireHydrantHistory.objects.raw("SELECT * FROM mfire_firehydranthistory INNER JOIN mfire_sitemodelproduct ON 	mfire_firehydranthistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_firehydranthistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product2':product2,'clients':clients,'employees':employees})
            elif id == '3':
                product3 = HoseReelHistory.objects.raw("SELECT * FROM mfire_hosereelhistory INNER JOIN mfire_sitemodelproduct ON mfire_hosereelhistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_hosereelhistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product3':product3,'clients':clients,'employees':employees})
            elif id == '4':
                product4 = FireBucketHistory.objects.raw("SELECT * FROM mfire_firebuckethistory INNER JOIN mfire_sitemodelproduct ON mfire_firebuckethistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_firebuckethistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s  AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product4':product4,'clients':clients,'employees':employees})
            elif id == '5':
                product5 = FirePumpHistory.objects.raw("SELECT * FROM mfire_firepumphistory INNER JOIN mfire_sitemodelproduct ON mfire_firepumphistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_firepumphistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s  AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product5':product5,'clients':clients,'employees':employees})
            elif id == '6':
                product6 = FireDetectionHistory.objects.raw("SELECT * FROM mfire_firedetectionhistory INNER JOIN mfire_sitemodelproduct ON mfire_firedetectionhistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_firedetectionhistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s  AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product6':product6,'clients':clients,'employees':employees})
            elif id == '7':
                product7 = PortableMonitorHistory.objects.raw("SELECT * FROM mfire_portablemonitorhistory INNER JOIN mfire_sitemodelproduct ON mfire_portablemonitorhistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_portablemonitorhistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s  AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product7':product7,'clients':clients,'employees':employees})
            elif id == '8':
                product8 = SuppresionSystemHistory.objects.raw("SELECT * FROM mfire_suppresionsystemhistory INNER JOIN mfire_sitemodelproduct ON mfire_suppresionsystemhistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_suppresionsystemhistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s  AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product8':product8,'clients':clients,'employees':employees})
            elif id == '9':
                product9 = ControlValveHistory.objects.raw("SELECT * FROM mfire_controlvalvehistory INNER JOIN mfire_sitemodelproduct ON mfire_controlvalvehistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_controlvalvehistory.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=%s AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                return render(request,'vendor/get_client_month_report.html',{'products':products,'product9':product9,'clients':clients,'employees':employees})
            # elif id == '9':
            #     product9 = ControlValveHistory.objects.raw("SELECT * FROM mfire_controlvalvehistory INNER JOIN mfire_sitemodelproduct ON mfire_controlvalvehistory.smpid_id=mfire_sitemodelproduct.id WHERE Month(mfire_sitemodelproduct.createdate) = %s AND mfire_sitemodelproduct.clientid_id= %s AND mfire_sitemodelproduct.client_location_id=% AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
            #     return render(request,'vendor/get_client_month_report.html',{'products':products,'product9':product9,'clients':clients,'employees':employees})
            else:
                products = Product.objects.all()
                if month == '0':
                    productreports = SiteModelProduct.objects.filter(clientid=client_id,client_location__id=location,disable=0)
                else:
                    productreports = SiteModelProduct.objects.raw("SELECT * FROM mfire_sitemodelproduct WHERE Month(createdate) = %s AND clientid_id= %s AND client_location_id=%s AND mfire_sitemodelproduct.disable=%s", [month, client_id, location, 0])
                UserModel = get_user_model()
                employees = UserModel.objects.filter(user_type='1')
                clients = UserModel.objects.filter(user_type='2')
                return render(request,'vendor/reports.html',{'products':products,'clients':clients,'employees':employees,'productreports':productreports})
        else:
            return redirect('/')
    except:
        return redirect('/vendor/report/')
        
                              

def alltickete(request):
    products = Product.objects.all()
    allticketes = SupportTickets.objects.filter(clientid=request.user.id)
    return render(request,'vendor/all_tickete.html',{'allticketes':allticketes,'products':products})

def loadassignemp(request):
    modelno = request.GET.get('modelno')
    client = request.GET.get('client')
    if SiteModelProduct.objects.filter(modelno=modelno,clientid=client):
        mvalue = SiteModelProduct.objects.get(modelno=modelno)
        empid = mvalue.empid.first_name + " " + mvalue.empid.last_name
        email = mvalue.empid.email
        return JsonResponse({'empid':empid,'email':email})
    else:
        return JsonResponse({'status':0})
    
def addtickete(request):
    if request.method == 'POST':
            user = request.user
            clint_name = request.POST.get('client_name')
            message = request.POST.get('message')
            subject = request.POST.get('subject')
            assign_emp = request.POST.get('assign_emp')
            empassign = User.objects.get(email=assign_emp)
            assingnote = request.POST.get('assingnote')
            modelno = request.POST.get('modelno')
            priority = request.POST.get('priority')
            img = request.FILES.get('img')
            tickets_id = random.randint(111111,999999)
            allticketes = SupportTickets(clientid=user,clint_name=clint_name,tickets_id=tickets_id,subject=subject,message=message,assignemp=empassign,
                            assingnote=assingnote,img=img,status='Open',modelno=modelno,priority=priority)
            allticketes.save()
            msgs = f"Your ticket {tickets_id} Create Success"
            alert = Alert(msg=msgs,empid=empassign,clientid=user,status='1')
            alert.save()
            try:
                msg_plain = render_to_string('email.txt')
                msg = render_to_string('email/ticke.html',{'c_name':clint_name,'msg':message,'modelno':modelno,'ticketno':tickets_id})
                subject = f'Ticket created, Ticket number {tickets_id}'
                send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, [user.email],html_message = msg)
                send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msg)
            except:
                pass
            messages.success(request, 'Tickete Add Success')
            return redirect('/vendor/alltickete/')
    else:
        products = Product.objects.all()
        assignpme = SiteModelProduct.objects.filter(clientid=request.user)
        return render(request,'vendor/add_tickete.html',{'products':products,'assignpme':assignpme})
        
def vendor_profile(request):
    if request.method == 'POST':
        user_id = request.POST.get('user_id')
        clients = User.objects.get(id=user_id)
        clients.first_name = request.POST.get('first_name')
        clients.last_name = request.POST.get('last_name')
        clients.phone = request.POST.get('phone')
        clients.company = request.POST.get('company')
        clients.location = request.POST.get('address')
        clients.email = request.POST.get('email')
        if len(request.FILES) != 0:
            if clients.img:
                os.remove(clients.img.path)
            clients.img = request.FILES.get('logo')
        clients.save()
        location = request.POST.getlist('location[]')
        for i in location:
            alredy = ClientLocation.objects.filter(client_id=request.user)
            if alredy:
                created = ClientLocation.objects.filter(client_id=request.user)
                for l in created:
                    l.cl_location = i
            else:
                created = ClientLocation(client_id=request.user,cl_location=i)
                created.save()
        messages.success(request, 'Update Success.')
        return redirect('/vendor/profile/')
    else:
        clients = User.objects.get(id=request.user.id)
        products = Product.objects.all()
    return render(request,'vendor/profile.html',{'products':products,'clients':clients})
    
def client_service_report(request):
    try:
        pid = request.GET.get('pid')
        id = request.GET.get('id')
        products = Product.objects.all()
        if pid == '5':
            service = FirePumpService.objects.filter(fire_pump_id=id)
            return render(request,'vendor/service_report.html',{'service':service,'products':products})
        elif pid == '6':
            service = FireDetectionService.objects.filter(fire_detection_id=id)
            return render(request,'vendor/service_report.html',{'service':service,'products':products})
        elif pid == '8':
            service = SuppresionSystemService.objects.filter(suppresion_system_id=id)
            return render(request,'vendor/service_report.html',{'service':service,'products':products})
        else:
            messages.success(request, 'Something Wrong.')
            return redirect('/vendor/dashboard/')
    except:
        messages.success(request, 'Something Wrong.')
        return redirect('/vendor/dashboard/')
        
        
def company_inspection(request):
    compins = CompanyInspection.objects.filter(clientid=request.user.id)
    products = Product.objects.all()
    return render(request,'vendor/c_inspection.html',{'products':products,'compins':compins})

def update_inspection(request):
    if request.method == 'POST':
        ci = request.POST.get('ci')
        status = request.POST.get('status')
        reshedul_date = request.POST.get('reshedul_date')
        company = CompanyInspection.objects.get(id=ci)
        company.status = status
        company.reshedul_date = reshedul_date
        company.save()
        msgs = f"{company.clientid.company} Company Inspection Date {company.inspection_date} Change to {reshedul_date}"
        try:
            msg_plain = render_to_string('email.txt')
            subject = f'Company Inspecton Date Created'
            send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, [company.clientid.email,company.assignemp.email],html_message = msgs)
            send_mail(subject, msg_plain, settings.EMAIL_HOST_USER, ['manojgrouppune@gmail.com'],html_message = msgs)
        except:
            pass
        return JsonResponse({'status':200})
    else:
        ci = request.GET.get('ci')
        compins = CompanyInspection.objects.get(id=ci)
        products = Product.objects.all()
        return render(request,'vendor/update_inspection.html',{'products':products,'compins':compins})

    
# logout
        
def logout(request):
    auth.logout(request)
    return redirect("/")
    
from .helpers import send_forget_password_mail
def forgetpassword(request):
    try:
        if request.method == 'POST':
            email = request.POST.get('email')
            UserModel = get_user_model()
            if not UserModel.objects.filter(email=email):
                messages.success(request, 'Not User Found. check email')
                return redirect('/password_reset/')
            else:
                user_obj = UserModel.objects.get(email=email)
                token = user_obj.token
                send_forget_password_mail(user_obj,token)
                return redirect("/password_reset_done/")
    except:
        messages.success(request, 'something wrong')
        return redirect("/")
        
def password_reset_confirm(request, token):
    try:
        if request.method == 'POST':
            password1 = request.POST.get('password1')
            password2 = request.POST.get('password2')
            if password1 == password2:
                UserModel = get_user_model()
                profile_obj = UserModel.objects.get(token=token)
                profile_obj.password = password1
                profile_obj.set_password(password1)
                profile_obj.save()
                return redirect('/password-reset-complete/')
            else:
                messages.success(request, 'Password Not Match')
                return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
        else:
            UserModel = get_user_model()
            profile_obj = UserModel.objects.filter(token=token)
            return render(request,"password_reset_confirm.html")
    except:
        messages.success(request, 'something wrong')
        return redirect("/")
        
def set_password(request):
    if request.method == "POST":
        id = request.POST.get('id')
        password1 = request.POST.get('password')
        UserModel = get_user_model()
        profile_obj = UserModel.objects.get(id=id)
        profile_obj.set_password(password1)
        profile_obj.save()
        messages.info(request,'Success')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        messages.info(request,'Some Thing Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

def privacy_statement(request):
    return render(request, "privacy-statement.html")
    
    
def fire_extinguisher_alert(request):
    current_date = timezone.now()
    target_date_before = current_date + timezone.timedelta(days=30)
    # return HttpResponse(target_date_before)
    fetype = request.GET.get("fetype")
    if fetype:
        fireextalert = FireExtinguisherHPCL.objects.filter(
        FEType=fetype,duedateht__lte=target_date_before)
    else:
        fireextalert = FireExtinguisherHPCL.objects.filter(duedateht__lte=target_date_before)
    # Q(duedaterefiiling=target_date_before) | Q(duedaterefiiling__lte=current_date)
    paginator = Paginator(fireextalert, 500)  # Show 25 contacts per page.
    page_number = request.GET.get("page")
    page_obj = paginator.get_page(page_number)
    return render(request, "mfire/alert-fire-extinghuisher.html",{'page_obj':page_obj,'fetype':fetype})

    
def delete_his(request):
    try:
        id = request.GET.get('id')
        pid = request.GET.get('pid')
        if pid == "10" or pid == 10:
            FireExtinguisherHPCL.objects.get(id=id).delete()
        else:
            FireHydrantHPCL.objects.get(id=id).delete()
        messages.info(request,'Delete Success')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    except:
        messages.info(request,'Something Wrong')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
