import json
import string
from datetime import datetime
import numpy as np
import pandas as pd
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, permission_classes, authentication_classes
from rest_framework.permissions import IsAuthenticated
from payrollservice.data.response.emppaystructuredeductionsresponse import EmployeePaystructure_deductionsResponse
from payrollservice.service.empmonthlypaydetailsservice import Employeemonthlypay_detailsService
from utilityservice.data.response.nwisefinerror import NWisefinError
from utilityservice.data.response.nwisefinlist import NWisefinList
from utilityservice.data.response.nwisefinpage import NWisefinPage
from utilityservice.data.response.nwisefinpaginator import NWisefinPaginator
from utilityservice.data.response.nwisefinsuccess import NWisefinSuccess
from utilityservice.permissions.util.dbutil import ModuleList
# from utilityservice.service.nwisefinauthenticate import NWisefinAuthentication
from common_middleware.request_middleware import NWisefinAuthentication
from utilityservice.service.nwisefinpermission import NWisefinPermission
from utilityservice.service.payroll_api_service import Payrollcommon_Apicall


@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def employee_monthlydetails_year(request):
    scope = request.scope
    if request.method == 'GET':
        emp_id = request.GET.get('employee_id')
        year = request.GET.get('year')
        action = request.GET.get('action', None)
        if action in ('0','1','2','3'):
            if action == '0':
                arr = EmployeePaystructure_deductionsResponse()
                apifunction = Payrollcommon_Apicall(scope)
                emp_data = apifunction.emp_details_payroll(emp_id)
                # emp_data = EmployeemonthlypayService(scope).employee_details(emp_id)
                employeemonthpay_detail = Employeemonthlypay_detailsService(scope).employeemonthlypay_detailinfo_get1(emp_id, year)
                arr.employee_personal_info = emp_data
                arr.paycomponent = employeemonthpay_detail[-1]
                arr.pay_info_month = employeemonthpay_detail[:12]
                response = HttpResponse(arr.get(), content_type='application/json')
                return response
            # excel
            elif action == '1':
                emp_data = Employeemonthlypay_detailsService(scope).employeemonthlyyear_excel_report(emp_id,year)
                emp_data = emp_data[['Item', 'January'+ ' ' + str(year), 'February'+ ' ' + str(year), 'March'+ ' ' + str(year), 'April'+ ' ' + str(year), 'May'+ ' ' + str(year), 'June'+ ' ' + str(year), 'July'+ ' ' + str(year), 'August'+ ' ' + str(year), 'September'+ ' ' + str(year), 'October'+ ' ' + str(year), 'November'+ ' ' + str(year), 'December'+ ' ' + str(year)]]
                emp_data['Grand Total'] = emp_data.loc[0: 50, ['January'+ ' ' + str(year), 'February'+ ' ' + str(year), 'March'+ ' ' + str(year), 'April'+ ' ' + str(year), 'May'+ ' ' + str(year), 'June'+ ' ' + str(year), 'July'+ ' ' + str(year), 'August'+ ' ' + str(year), 'September'+ ' ' + str(year), 'October'+ ' ' + str(year), 'November'+ ' ' + str(year), 'December'+ ' ' + str(year)]].sum(axis=1)
                apifunction = Payrollcommon_Apicall(scope)
                emp_data1 = apifunction.emp_details_payroll(emp_id)
                # emp_data1 = EmployeemonthlypayService(scope).employee_details(emp_id)
                dict1={}
                dict1['EmployeeName'] = emp_data1.get('full_name')
                dict1['EmployeeCode'] = emp_data1.get('code')
                dict1['PF NUMBER'] = emp_data1.get('pf_number')
                # if 'bankdetails' != emp_data1:
                    # dict['Bank'] = None
                    # dict['BankBranch'] = None
                    # # dict['ifsccode'] = None
                    # dict['accountnumber'] = None
                # else:
                    # dict['Bank'] = json.loads(emp_data1.get())["bankdetails"]["Bank"]['name']
                    # dict['BankBranch'] = json.loads(emp_data1.get())["bankdetails"]["BankBranch"]['name']
                    # dict['ifsccode'] = json.loads(emp_data1.get())["bankdetails"]["BankBranch"]['ifsccode']
                    # dict['accountnumber'] = json.loads(emp_data1.get())["bankdetails"]['accountnumber']

                excel = 'application/vnd.ms-excel'
                response = HttpResponse(content_type=excel)
                filename = 'YTD SUMMARY' + str(datetime.now())
                response['Content-Disposition'] = f'attachment; filename="{str(filename) + ".xlsx"}"'
                writer = pd.ExcelWriter(response, engine='xlsxwriter')
                emp_data.to_excel(writer, index=False, startrow=5)
                worksheet = writer.sheets['Sheet1']
                workbook = writer.book
                worksheet.write('C2', dict1['EmployeeName'])
                worksheet.write('C3', dict1['EmployeeCode'])
                worksheet.write('C4', dict1['PF NUMBER'])
                # worksheet.write('C3', dict['Bank'])
                # worksheet.write('C3', dict['BankBranch'])
                # worksheet.write('C3', dict['ifsccode'])
                # worksheet.write('C3', dict['accountnumber'])
                bold_format = workbook.add_format({'bold': True})
                worksheet.write_string(1,1,'EmployeeName',bold_format)
                worksheet.write_string(2,1,'EmployeeCode',bold_format)
                worksheet.write_string(3,1,'PF NUMBER',bold_format)
                # worksheet.write_string(1,4,'Bank',bold_format)
                # worksheet.write_string(2,4,'BankBranch',bold_format)
                # worksheet.write_string(1,7,'ifsccode',bold_format)
                # worksheet.write_string(2,7,'accountnumber',bold_format)
                # worksheet.write_string(0, 3, str(filename), bold_format)
                header_format = workbook.add_format({'bg_color': 'FCBA03'})
                header_format.set_align('center')
                header_format.set_bold()
                worksheet.write_string(0, 5, 'YTD SUMMARY', header_format)
                format = [workbook.add_format({'bg_color': '#BDFCC9'}), workbook.add_format({'bg_color': '#98F5FF'})]
                d = dict(zip(range(25), list(string.ascii_uppercase)[0:]))
                cols = ['Grand Total', 'Item']
                for col, j in zip(cols, format):
                    excel_header = str(d[emp_data.columns.get_loc(col)])
                    len_df = str(len(emp_data.index) + 100)
                    rng = excel_header + '7:' + excel_header + len_df
                    worksheet.conditional_format(rng, {'type': 'no_blanks', 'format': j})
                format_1 = workbook.add_format({'bg_color': '#D4D4D4'})
                cols1 = ['January'+ ' ' + str(year), 'February'+ ' ' + str(year), 'March'+ ' ' + str(year), 'April'+ ' ' + str(year), 'May'+ ' ' + str(year), 'June'+ ' ' + str(year), 'July'+ ' ' + str(year), 'August'+ ' ' + str(year), 'September'+ ' ' + str(year), 'October'+ ' ' + str(year), 'November'+ ' ' + str(year), 'December'+ ' ' + str(year)]
                for col1 in cols1:
                    excel_header = str(d[emp_data.columns.get_loc(col1)])
                    len_df1 = str(len(emp_data.index) + 100)
                    rng1 = excel_header + '7:' + excel_header + len_df1
                    worksheet.conditional_format(rng1, {'type': 'no_blanks', 'format':format_1})
                header_format2 = workbook.add_format({'bold': True,'fg_color': '#ffcccc', 'border': 1})
                for col_num, value in enumerate(emp_data.columns.values):
                    worksheet.write(5, col_num, value, header_format2)
                writer.close()
                return HttpResponse(response)


            elif action == '3':
                arr = EmployeePaystructure_deductionsResponse()
                apifunction = Payrollcommon_Apicall(scope)
                emp_data = apifunction.emp_details_payroll(emp_id)
                employeemonthpay_detail = Employeemonthlypay_detailsService(scope).employeemonthlypay_detailinfo_get1(emp_id, year)
                arr.employee_personal_info = emp_data
                arr.paycomponent = employeemonthpay_detail[12]
                arr.pay_info_month = employeemonthpay_detail[0:12]
                template_path = 'ytdsummary.html'
                data = json.loads(arr.get())
                str_template = render_to_string(template_path, data)
                import pdfkit
                output = pdfkit.from_string(str_template, output_path=False)
                response = HttpResponse(content_type="application/pdf")
                response.write(output)
                return response


            elif action == '2':
                employeemonthpay_detail = Employeemonthlypay_detailsService(scope).employeemonthlypay_detailinfo_get(emp_id,year)
                if not isinstance(employeemonthpay_detail,dict):
                    return HttpResponse(employeemonthpay_detail.get(), "application/json")
                common_pdf = Employeemonthlypay_detailsService(scope).payroll_commonpdf(employeemonthpay_detail)
                return common_pdf
        else:
            error_obj = NWisefinError()
            error_obj.message='invalid inputs'
            response = HttpResponse(error_obj.get(), "application/json")
            return response


@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def salarystatement_excel_downloade(request):
    scope = request.scope
    if request.method == 'GET':
        payroll_serv = Employeemonthlypay_detailsService(scope).salary_excel_downloade()
        remove_df = payroll_serv.drop(columns=['empmonthly_pay_id', 'id_x', 'created_date_x', 'created_by_x', 'updated_date_x','status_x',
                                               'updated_by_x', 'pay_status', 'pay_mode', 'is_tds', 'pf_type', 'id_y', 'candidate_code', 'employment_type', 'user_id',
                                               'first_name', 'middle_name', 'last_name', 'grade', 'srlno', 'branch', 'address_id', 'employeebank_id', 'lastsync_date', 'status_y',
                                               'branch', 'address_id', 'employeebank_id', 'lastsync_date', 'status_y', 'created_by_y', 'created_date_y', 'updated_by_y', 'updated_date_y', 'grade1', 'grade2', 'gender', 'department_id',
                                               'employee_branch_id', 'role', 'RM', 'functional_head', 'grade1_date', 'grade2_date', 'noticeperiod', 'dob', 'expected_doj', 'effective_from', 'phone_no', 'employee_type',
                                               'supervisor', 'hierarchy', 'contact_id', 'manager', 'org_id', 'designation_id', 'workmode', 'approve_status', 'approved_by',
                                               'disabality', 'is_payroll', 'empmonthly_pay_id', 'costcentre', 'businesssegment',  'payroll_date', 'id', 'entity_id_x', 'created_by', 'created_date', 'updated_by', 'updated_date','paycomponent_id',
                                               'type', 'from_date', 'to_date', 'empmonthly_pay_id'])

        remove_df['Dearness'] = '0.0'
        remove_df['House Rent'] = '0.0'
        remove_df['Special'] = '0.0'
        # remove_df['NET PAY'] = ''
        data_df = remove_df.rename(columns={'employee_id_x': 'Employee ID', 'code_y': 'Employee no', 'full_name': 'name','designation':'Designation', 'email_id': 'E-mail', 'accountnumber': 'Bank A/C No', 'payable_days': 'DAYS IN MONTH', 'paid_days': 'EMP EFFECTIVE WORKDAYS', 'doj': 'Join Date', 'amount': 'TOTAL DEDUCTION'})
        final_df = data_df[['Employee ID','Employee no', 'name', 'Designation', 'E-mail', 'Bank A/C No', 'Join Date', 'DAYS IN MONTH', 'EMP EFFECTIVE WORKDAYS', 'Basic & DA','Dearness',
                            'House Rent', 'Special', 'pf_number', 'esi_number', 'gross_pay', 'TOTAL DEDUCTION']]
        final_df['NET PAY']='0.0'
        for index, row in final_df.iterrows():
            basic_da = row['Basic & DA']
            Dearness = float(row['Dearness'])
            house_rent = float(row['House Rent'])
            Special = float(row['Special'])
            Total_deduction = float(row['TOTAL DEDUCTION'])
            payable_days = float(row['DAYS IN MONTH'])
            paid_days = float(row['EMP EFFECTIVE WORKDAYS'])
            total_payable_days = payable_days-paid_days
            total_calculation = basic_da+Dearness+house_rent+Special-Total_deduction
            final_df.loc[index,'NET PAY'] = total_calculation
            final_df.loc[index,'Total_days'] = total_payable_days
        df = final_df[
            ['Employee ID', 'Employee no', 'name', 'Designation', 'E-mail', 'Bank A/C No', 'pf_number', 'esi_number', 'Join Date', 'DAYS IN MONTH',
             'EMP EFFECTIVE WORKDAYS', 'Total_days', 'Basic & DA', 'Dearness',
             'House Rent', 'Special',  'gross_pay', 'TOTAL DEDUCTION', 'NET PAY']]
        excel = 'application/vnd.ms-excel'
        response = HttpResponse(content_type=excel)
        month_year=datetime.now()
        month = month_year.strftime('%b')
        year = month_year.strftime('%Y')
        day = month_year.strftime('%d')
        min_sec = month_year.strftime("%X")
        filename = 'Salary Statement For The Month Of' + ' ' + month + ' ' + year
        response['Content-Disposition'] = f'attachment; filename="{str(filename) + ".xlsx"}"'
        writer = pd.ExcelWriter(response, engine='xlsxwriter')
        df.to_excel(writer, index=False, startrow=2)
        worksheet = writer.sheets['Sheet1']
        workbook = writer.book
        cols = 'EMP EFFECTIVE WORKDAYS'
        column_index = final_df.columns.get_loc(cols)
        len_df = len(final_df.index) + 3
        rng = f"{chr(65 + column_index)}2:{chr(65 + column_index)}{len_df}"
        format = workbook.add_format({'bg_color': 'yellow'})
        worksheet.conditional_format(rng, {'type': 'no_blanks', 'format': format})
        bold_format = workbook.add_format({'bold': True})
        worksheet.write_string(0, 2, str(filename), bold_format)
        worksheet.write_string(0, 10, str("Created On:"+' '+day+' '+month+' '+year+' '+min_sec))
        writer.close()
        return HttpResponse(response)

@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def salary_statement_summary(request):
    scope = request.scope
    success_obj =NWisefinSuccess()
    user_id = request.employee_id
    if request.method == 'GET':
        excel = request.GET.get('excel', 0)
        payroll_serv = Employeemonthlypay_detailsService(scope).salarystatement_forallemp_cm(request,1, 2,user_id)
        try:
            if excel:
                if 'Annual Bonus Paid Monthly' not in payroll_serv.columns:
                    payroll_serv['Annual Bonus Paid Monthly'] = 0.0
                if 'Std Annual Bonus Paid Monthly' not in payroll_serv.columns:
                    payroll_serv['Std Annual Bonus Paid Monthly'] = 0.0
                # if 'Custom Deductions' not in payroll_serv.columns:
                #     payroll_serv['Custom Deductions'] = '0.0'
                # if 'Extra Allowance' not in payroll_serv.columns:
                #     payroll_serv['Extra Allowance'] = '0.0'
                if 'Std LTA' not in payroll_serv.columns:
                    payroll_serv['Std LTA'] = '0.0'
                if 'LTA' not in payroll_serv.columns:
                    payroll_serv['LTA'] = '0.0'
                if 'PF' not in payroll_serv.columns:
                    payroll_serv['PF'] = '0.0'
                if 'ESI' not in payroll_serv.columns:
                    payroll_serv['ESI'] = '0.0'
                payroll_serv['Gross Earnings'] = pd.to_numeric(
                    payroll_serv['Annual Bonus Paid Monthly'] + pd.to_numeric(payroll_serv['Gross pay']), downcast="float")
                payroll_serv['Std Gross Earnings'] = pd.to_numeric(
                    payroll_serv['Std Annual Bonus Paid Monthly'] + pd.to_numeric(payroll_serv['Gross pay_std']),
                    downcast="float")
                payroll_serv['Net Amount'] = payroll_serv['Std Gross Earnings']-(payroll_serv['Std Emp deductions  ESI']+payroll_serv['Std Emp deductions  PF'])
                payroll_serv['doj'] = pd.to_datetime(payroll_serv['doj'])
                date = payroll_serv['doj']
                payroll_serv['doj'] = date.dt.strftime("%d %b %Y")
                fin_df = payroll_serv.rename(columns={'full_name': 'Emp_name', 'department': 'Department'})
                fin_df.fillna('0.0')
                fin_df.replace({np.nan: 0.0}, inplace=True)
                fin_df.set_index('Emp_name', inplace=True)
                # final_df = fin_df[
                #     ['Emp_name', 'code', 'employee_branch__code', 'employee_branch__name', 'Department', 'doj',
                #      'Std Basic & DA', 'Std HRA', 'Std Conveyance', 'Std Telephone', 'Std LTA', 'Std Medical', 'Std Others',
                #      'Gross pay_std', 'Std Annual Bonus Paid Monthly', 'Std Gross Earnings', 'Std Emp deductions  ESI',
                #      'Std Emp deductions  PF', 'Std CmpESI', 'Std CmpPF', 'Net Amount', 'paid days', 'payable days',
                #      'Basic & DA', 'HRA', 'Conveyance', 'Telephone', 'LTA', 'Medical', 'Others',
                #      'Gross pay', 'Annual Bonus Paid Monthly','Extra Allowance', 'Gross Earnings', 'Cmpy contStd CmpESI',
                #      'Cmpy contStd CmpPF', 'Custom Deductions','PF','ESI']]
                # final_df['Net amount']=final_df['Gross Earnings']
                # fi_df = final_df.astype({"Basic & DA":"float","HRA":"float","Conveyance":"float","LTA":"float",
                #                   "Medical":"float","Others":"float","Gross pay":"float",'Extra Allowance':'float',
                #                          "Annual Bonus Paid Monthly":"float",'Telephone':"float","Cmpy contStd CmpESI":"float","Cmpy contStd CmpPF":"float","Gross Earnings":"float",
                #                          "Net amount":"float","PF":"float","ESI":"float"})
                #
                # fi_df[["Basic & DA", "HRA", "Conveyance", "LTA", "Medical", "Others", "Gross pay",
                #        "Annual Bonus Paid Monthly", 'Telephone', 'Cmpy contStd CmpESI','Cmpy contStd CmpPF','Gross Earnings','Net amount','Extra Allowance','PF','ESI']] = \
                # fi_df[["Basic & DA", "HRA", "Conveyance", "LTA", "Medical", "Others", "Gross pay",
                #        "Annual Bonus Paid Monthly", 'Telephone', 'Cmpy contStd CmpESI', 'Cmpy contStd CmpPF','Gross Earnings','Net amount','Extra Allowance','PF','ESI']].round(2)
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                fin_df.to_excel(writer, sheet_name='Sheet1')
                writer.close()
                return format
        except:
            success_obj.set_status('NO DATA')
            response = HttpResponse(success_obj.get(), content_type='application/json')
            return response
        else:
            list_data = NWisefinList()
            page = request.GET.get('page', 1)
            page = int(page)
            vys_page = NWisefinPage(page, 10)
            if payroll_serv.empty:
                vpage = NWisefinPaginator([], vys_page.get_index(), 10)
                list_data.set_pagination(vpage)
            else:
                # df = payroll_serv[['id','code','full_name','doj','employee_branch__code','employee_branch__name','employee_id','Gross pay_std','Std Annual Bonus Paid Monthly',
                #                    'Std Basic & DA','Std CmpESI','Std CmpPF','Std Conveyance','Std Emp deductions  PF', 'Std Emp deductions  ESI','Std HRA','Std LTA','Std Others','Std Telephone', 'Gross pay','Annual Bonus Paid Monthly',
                #                    'Basic & DA','Cmpy contStd CmpPF','Conveyance','HRA','LTA','Medical','Others','Telephone']]
                res = payroll_serv.to_json(orient="records")
                emp_fin_df = json.loads(res)[vys_page.get_offset():vys_page.get_query_limit()]
                list_data.data=emp_fin_df
                vpage = NWisefinPaginator(emp_fin_df, vys_page.get_index(), 10)
                list_data.pagination=vpage
            val = json.dumps(list_data, default=lambda o: o.__dict__,  indent=4)
            response = HttpResponse(val, content_type='application/json')
            return response


@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def payroll_review(request):
    scope = request.scope
    if request.method == 'GET':
        month = request.GET.get('month')
        year = request.GET.get('year')
        excel = request.GET.get('excel',0)
        page = request.GET.get('page', 1)
        query = request.GET.get('query',5)
        pay_status = request.GET.get('paystatus',0)
        emp_cc = request.GET.get('emp_cc')
        emp_bs = request.GET.get('emp_bs')
        employee = request.GET.get('employee')
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        payroll_serv = Employeemonthlypay_detailsService(scope).payroll_review1(month, year,excel,vys_page,int(query),int(pay_status),emp_cc,emp_bs,employee)
        if int(excel):
            if payroll_serv.empty:
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1')
                writer.close()
            else:
                payroll_serv['take_home w/o bonus'] = payroll_serv['take_home w/o bonus'].astype(float)
                payroll_serv['bonus'] = payroll_serv['bonus'].astype(float)
                payroll_serv['doj'] = pd.to_datetime(payroll_serv['doj'])
                date = payroll_serv['doj']
                payroll_serv['doj'] = date.dt.strftime("%d %b %Y")
                payroll_serv = payroll_serv.pivot_table(index=['employee_id', 'code', 'doj','costcentre','businesssegment'], columns='headings',values=['take_home w/o bonus', 'bonus']).sort_index(axis='columns', level='headings').swaplevel(axis=1)
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1')
                writer.close()
            return format
        else:
            response = HttpResponse(payroll_serv.get() ,content_type='application/json')
        return response


# DROPDOWN cc
@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def dropdown_cc(request):
    scope = request.scope
    cc = Payrollcommon_Apicall(scope).dropdown_cc()
    response = HttpResponse(cc, content_type="application/json")
    return response


# dropdown_bs
@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def dropdown_bs(request):
    scope = request.scope
    bs = Payrollcommon_Apicall(scope).dropdown_bs()
    response = HttpResponse(bs, content_type="application/json")
    return response


@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def addictional_allowance_data(request):
    scope = request.scope
    if request.method == 'GET':
        month = request.GET.get('month')
        year = request.GET.get('year')
        excel = request.GET.get('excel', 0)
        page = request.GET.get('page', 1)
        query = request.GET.get('query', 5)
        pay_status = request.GET.get('paystatus', 0)
        emp_cc = request.GET.get('emp_cc')
        emp_bs = request.GET.get('emp_bs')
        employee = request.GET.get('employee')
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        payroll_serv = Employeemonthlypay_detailsService(scope).addictional_allowance_data(month, year, excel, vys_page,
                                                                                           int(query), int(pay_status),
                                                                                           emp_cc, emp_bs,employee)
        if int(excel):
            if payroll_serv.empty:
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1')
                writer.close()
            else:
                payroll_serv['amount'] = payroll_serv['amount'].astype(float)
                payroll_serv['bonus'] = payroll_serv['bonus'].astype(float)
                payroll_serv['doj'] = pd.to_datetime(payroll_serv['doj'])
                date = payroll_serv['doj']
                payroll_serv['doj'] = date.dt.strftime("%d %b %Y")
                payroll_serv = payroll_serv.pivot_table(
                    index=['employee_id', 'code', 'doj', 'costcentre', 'businesssegment'], columns='headings',
                    values=['amount', 'bonus']).sort_index(axis='columns', level='headings').swaplevel(axis=1)
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1')
                writer.close()
            return format
        else:
            response = HttpResponse(payroll_serv.get(), content_type='application/json')
        return response



@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def salary_statement_summary1(request):
    scope = request.scope
    user_id = request.employee_id
    if request.method == 'GET':
        page = request.GET.get('page', 1)
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        excel = request.GET.get('excel', 0)
        payroll_serv = Employeemonthlypay_detailsService(scope).salarystatement_forallemp_cm_sample(request,1, 2,user_id,vys_page,excel,None, None)
        if excel:
            if isinstance(payroll_serv, NWisefinError):
                return HttpResponse(payroll_serv.get(), content_type='application/json')
            if payroll_serv.empty:
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1',index=False)
                writer.close()
            else:
                format = HttpResponse(content_type=excel)
                writer = pd.ExcelWriter(format, engine='xlsxwriter')
                payroll_serv.to_excel(writer, sheet_name='Sheet1',index=False)
                writer.close()
            return format
        else:
            if isinstance(payroll_serv, NWisefinError):
                return HttpResponse(payroll_serv.get(), content_type='application/json')
            else:
                response = HttpResponse(payroll_serv, content_type='application/json')
                return response