from django.shortcuts import render

# Create your views here.
from django.shortcuts import render
import json
from django.conf import settings
from django.shortcuts import render
from inventory.models import *
from expenses.models import *
from inventory.models import *
from masters.models import *
from voucher.models import *
from stock.models import *
from sales.models import *
from django.db import IntegrityError, transaction
from collections import defaultdict
import hashlib
import os
from django.conf import settings
from datetime import datetime
from django.utils import timezone
from django.db.models import Max, F, Q,Sum
import base64
from django.shortcuts import render
from io import BytesIO
from django.conf import settings
from django.template.loader import get_template
from django.http import HttpResponse,HttpResponseRedirect,JsonResponse,FileResponse
from django.shortcuts import get_object_or_404
from django.templatetags.static import static
from xhtml2pdf import pisa
from num2words import num2words
from django.contrib.staticfiles import finders
from common.utils import *
from django.db import connection
import openpyxl
from openpyxl.styles import Font
from django.http import HttpResponse
from django.core.files.storage import default_storage
from django.db.models import F, FloatField, ExpressionWrapper, Sum, Q, Case, When, Value
import re
from decimal import Decimal
from django.db import connection
from supplier.models import *
from material.models import *
from scheme.models import *
from datetime import date
from store.models import *
# ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````


def imei_stock_list(request):
    if 'user_id' in request.session:
        user_type = request.session.get('user_type')
        branch_id = request.session.get('branch_id')

        supplier = selectList(supplier_table,{'is_global':1} ,order_by='name')
        branch = selectList(branch_table, order_by='name')
        category = selectList(category_table)
        sub_category = selectList(sub_category_table)
        brand = selectList(brand_table)
        return render(request, 'imei_stock.html',{'supplier':supplier,'branch':branch,'category':category,'sub_category':sub_category,'brand':brand })
        
        
    else:
        return HttpResponseRedirect("/")
from django.http import JsonResponse
from django.db.models import Q
from django.http import JsonResponse
from django.db.models import Q
from decimal import Decimal

from reports.report_utils import get_imei_stock_summary_data

def ajax_imei_stock_summary(request):
    branch_id = request.session.get('branch_id')
    try:
        is_ho = int(request.session.get('is_ho', 0))
    except (ValueError, TypeError):
        is_ho = 0
    role_id   = request.session.get('role_id')

    # ✅ Permission check
    has_access, error_message = check_user_access(role_id, 'imei_list', "read")
    if not has_access:
        return JsonResponse({
            'message': 'permission',
            'error_message': 'You do not have permission to view the IMEI Stock details'
        })

    # Filters
    posted_branch_id = request.POST.get('branch_id')
    
    # Logic for Branch Filter
    if is_ho == 1:
        if not posted_branch_id or posted_branch_id == 'All':
             posted_branch_id = None # Fetch All Branches
    else:
        posted_branch_id = branch_id # Force Session Branch
        
    filters = {
        'subcategory': request.POST.get('subcategory'),
        'brand_id': request.POST.get('brand_id'),
        'model_id': request.POST.get('model_id'),
        'variant_id': request.POST.get('variant_id'),
        'color_id': request.POST.get('color_id'),
        'stock': request.POST.get('stock'),
        'branch_id': posted_branch_id
    }
    
    # Custom logic: if no filter is selected (default view), show OPEN STOCK + NON OPEN STOCK
    if not filters['stock']:
        filters['include_non_open'] = True

    available_qty, formatted = get_imei_stock_summary_data(branch_id, is_ho, filters)

    # Compute aggregate totals from formatted rows
    def to_float(val):
        try:
            return float(str(val).replace(',', '')) if val else 0.0
        except (ValueError, TypeError):
            return 0.0

    total_fsp   = sum(to_float(r.get('fsp', 0))    for r in formatted)
    total_wsp   = sum(to_float(r.get('wsp', 0))    for r in formatted)
    total_mop   = sum(to_float(r.get('mop', 0))    for r in formatted)
    total_bop   = sum(to_float(r.get('bop', 0))    for r in formatted)
    total_mrp   = sum(to_float(r.get('mrp', 0))    for r in formatted)
    total_stock_value = sum(to_float(r.get('amount', 0)) for r in formatted)

    return JsonResponse({
        'data': formatted,
        'is_ho': is_ho,
        'available_qty': available_qty,
        'total_fsp': round(total_fsp, 2),
        'total_wsp': round(total_wsp, 2),
        'total_mop': round(total_mop, 2),
        'total_bop': round(total_bop, 2),
        'total_mrp': round(total_mrp, 2),
        'total_stock_value': round(total_stock_value, 2),
    })

from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def make_demo_stock(request):
    if request.method == "POST":
        imei = request.POST.get('imei')
        if not imei:
            return JsonResponse({
                "status": False,
                "message": "IMEI not provided"
            })

        stock_sources = [
            ('Purchase', child_purchase_inward_table),
            ('Material In', child_material_inward_table),
            ('Opening Stock', opening_stock_table)
        ]

        for source_name, model in stock_sources:
            item = model.objects.filter(
                imei_no=imei,
                is_active=1,
                status=1
            ).first()

            if item:
                # 🔁 Toggle demo status
                new_status = 0 if getattr(item, 'is_demo', 0) else 1
                item.is_demo = new_status
                item.save(update_fields=['is_demo'])

                if new_status == 1:
                    message = "Stock updated as demo stock"
                else:
                    message = "Demo stock reverted to normal stock"

                print(
                    f"IMEI {imei} | Source: {source_name} | "
                    f"Demo status set to: {new_status}"
                )

                return JsonResponse({
                    "status": True,
                    "imei": imei,
                    "is_demo": new_status,
                    "message": message
                })

        return JsonResponse({
            "status": False,
            "message": "IMEI not found in available stock"
        })

    return JsonResponse({
        "status": False,
        "message": "Invalid request method"
    })
