@extends('layouts.backend')

@section('extraCss')
@endsection

@section('mainContentArea')

    <div class="card card-default">
        <div class="card-header">
            <h4>Get POS Stock</h4>
        </div>

        <div class="alert alert-default">

            <form method="get" action="">
                @csrf
                <div class="form-group">
                    <select name="store" id="store" class="form-control select2" required>
                        <option value="">SELECT STORE</option>
                        @foreach ($ALL_POS as $store)
                            <option value="{{ $store->id }}" {{ request('store') == $store->id ? 'selected' : '' }}>
                                {{ $store->name }} - {{ $store->city }}</option>
                        @endforeach
                    </select>
                </div>
                <div class="form-group text-right">
                    <button type="submit" class="btn btn-success"><i class="fa fas fa-search"></i> Get Stock
                        Status</button>
                    <a href="{{ route('pos-stock-status-details', ['store' => request('store'), 'repType' => 'Opening']) }}" class="btn btn-info {{ empty(request('store')) ? 'd-none' : '' }}">Get Opening Stock</a>
                    <a href="javascript:void(0);" onclick="document.inwardRep.submit(); return false;" class="btn btn-primary {{ empty(request('store')) ? 'd-none' : '' }}">Get Inward Report</a>
                </div>
            </form>
            @if(!empty($stockBarcodes))
            @php
                $stockDataStatus = [
                    'Base',
                    'Inward',
                    'Sold',
                    'Exchange',
                    'GR',
                    'Qty',
                    'qty0',
                    'InwardOnly',
                    'SoldOnly',
                    'ExchangeOnly',
                    'BaseOnly',
                    'GROnly',
                ];
                $stockDataMatchStatus = [
                    'Matching',
                    'Mismatch',
                    'Missing',
                    'Scanned',
                    'NotScanned',
                ];
            @endphp
            <div class="row">
                <div class="col-md-8">
                    <h5>Filter data by match / mismatch</h5>
                    <div class="text-right">
                        @foreach($stockDataStatus as $s =>$st)
                        <label style="font-weight: bold; margin:5px; " for="filtera{{ $s }}"><input type="checkbox" name="filtera" id="filtera{{ $s }}" class="filterb" onclick="filterList();" value="{{ $st }}"> {{ $st }}</label>
                        @endforeach
                        @foreach($stockDataMatchStatus as $s =>$st)
                        <label style="font-weight: bold; margin:5px; " for="filterb{{ $s }}"><input type="checkbox" name="filterb" id="filterb{{ $s }}" class="filterb" onclick="filterList();" value="{{ $st }}"> {{ $st }}</label>
                        @endforeach
                    </div>
                </div>
                <div class="col-md-2 text-right totItemsDiv">
                    <h6>Total: <span class="totItems">{{ $stockBarcodes->count() }}</span></h6>
                </div>
                <div class="col-md-2 text-right">
                    <button class="m-3 btn btn-sm btn-warning" type="button" onclick="window.location.href = window.location.href;">Show All</button>
                    <button class="m-3 btn btn-sm btn-danger" type="button" onclick="fnExcelReport();return false;">Export</button>
                </div>
            </div>
            @endif

        </div>
    </div>
    @if (!empty($stockBarcodes))
        <div class="card card-default">
            <div class="card-header">
                <h4>POS Stock Details</h4>
            </div>
            <div class="card-body">
                <div class="table-responsive">
                    <table class="table table-striped" id="headerTable">
                        <thead>
                            <tr>
                                <th>Article</th>
                                <th>Color</th>
                                <th>Size</th>
                                <th>Barcode</th>
                                <th>MRP</th>
                                <th>Qty</th>
                                <th>History-1</th>
                                <th class="d-none">History</th>
                                <th>Expected Status</th>
                                <th>Current Status</th>
                                <th>Scanned</th>
                            </tr>
                        </thead>
                        <tbody>
                            @php
                                $poBarcodes = [];
                            @endphp
                            @foreach ($stockBarcodes as $stockIndex => $stockBarcode)
                            @php
                            $sql = "SELECT * FROM `oc_audit_barcode_scans` WHERE warehouse_id = '".$stockBarcode->barcode."' AND barcode = '".$stockBarcode->barcode."'";
                            $data = \DB::select(\DB::raw($sql));
                            if(empty($data) && in_array($stockBarcode->article, ['S1PS','S2PS'])) {
                                // continue;
                            }
                            if($stockIndex > 10 && request('debugstock') == 1) {
                                break;
                            }

                                    $stockStatusData = [];
                                    $stockStatus = [
                                        'baseStock' => '',
                                        'purchaseInward' => '',
                                        'sale' => '',
                                        'exchange' => '',
                                        'gr' => '',
                                    ];

                                    $stockData = [];
                                    $stockComp = [];
                                    // base stock
                                    $base = \App\Oldstock::where('barcode', $stockBarcode->barcode)
                                        ->where('warehouse_id', $stockBarcode->warehouse_id)
                                        ->first();
                                        if (!empty($base)) {
                                            $stockStatus['baseStock'].= 'Base Stock 20-21: '.$base->created_at->format('d/m/Y').'<br>';
                                            $BK = str_replace([' ', ':', '-'], "", '2020-04-01 00:00:00');
                                            $stockData[$BK] = 'Opening: 01/04/2020'.'<br>';
                                            $stockComp[$BK] = 'Base';
                                        }
                                    // purchase inward
                                        // olf inward
                                        $sql = "
                                            SELECT * FROM oc_wh_purchases WHERE id IN 
                                            (SELECT purchase_id FROM oc_wh_product_purchases WHERE barcode = '".$stockBarcode->barcode."')
                                            AND to_pos = '".$stockBarcode->warehouse_id."'
                                        ";
                                        $data = \DB::select(\DB::raw($sql));
                                        if(!empty($data)) {
                                            foreach($data as $rec) {
                                                $stockStatus['purchaseInward'].= 'Inward: '.$rec->created_at.'<br>';
                                                $BK = str_replace([' ', ':', '-'], "", $rec->created_at);
                                                $stockData[$BK] = 'Inward: '.$rec->created_at.'<br>';
                                            }
                                            if(!(in_array($stockBarcode->barcode, $poBarcodes))) {
                                                $poBarcodes[] = $stockBarcode->barcode;
                                            }
                                            $stockComp[$BK] = 'Inward';
                                        }
                                        $data_ = 0;
                                        if(empty($data)) {
                                            $sql_ = "SELECT * FROM `a_log_sales_outward` WHERE warehouse_id = '".$stockBarcode->warehouse_id."' AND barcode = '".$stockBarcode->barcode."'";
                                            $data_ = \DB::select(\DB::raw($sql_));
                                                if(!empty($data_)) {
                                                        foreach($data_ as $rec) {
                                                        $stockStatus['purchaseInward'].= 'Inward: '.$rec->created_at.'<br>';
                                                        $BK = str_replace([' ', ':', '-'], "", $rec->created_at);
                                                        $stockData[$BK] = 'Inward: '.$rec->created_at.'<br>';
                                                    }
                                                    if(!(in_array($stockBarcode->barcode, $poBarcodes))) {
                                                        $poBarcodes[] = $stockBarcode->barcode;
                                                    }
                                                    $stockComp[$BK] = 'Inward';
                                                }
                                        }
                                        if(empty($data_)) {
                                            $sql_ = "SELECT 
                                                        s.`reference_no`, s.`created_at`  
                                                    FROM 
                                                        oc_wh_sales s, oc_wh_product_sales sp
                                                    WHERE 
                                                        s.id = sp.`sales_id` 
                                                        AND barcode = '".$stockBarcode->barcode."'";
                                            $data_ = \DB::select(\DB::raw($sql_));
                                                if(!empty($data_)) {
                                                        foreach($data_ as $rec) {
                                                        $stockStatus['purchaseInward'].= 'Inward: '.$rec->created_at.'<br>';
                                                        $BK = str_replace([' ', ':', '-'], "", $rec->created_at);
                                                        $stockData[$BK] = 'Inward: '.$rec->created_at.'<br>';
                                                    }
                                                    if(!(in_array($stockBarcode->barcode, $poBarcodes))) {
                                                        $poBarcodes[] = $stockBarcode->barcode;
                                                    }
                                                    $stockComp[$BK] = 'Inward';
                                                }
                                        }

                                        $sql = "SELECT 
                                                    o.id,
                                                    o.`from_pos`,
                                                    o.`to_pos`,
                                                    op.`inwardedon`,
                                                    op.`barcode`,
                                                    o.date_added
                                                FROM 
                                                oc_purchase_order_pre o, 
                                                oc_sales_order_pre s, 
                                                oc_purchase_order_pre_products op

                                                WHERE o.`id` = op.`pre_purchase_id`
                                                AND o.`sid` = s.`id`
                                                AND s.`accounts` = 1
                                                AND o.`from_pos` = '".$stockBarcode->warehouse_id."'
                                                AND op.`barcode` = '".$stockBarcode->barcode."'";
                                        $data = \DB::select(\DB::raw($sql));
                                        if(!empty($data)) {
                                            foreach($data as $rec) {
                                                $stockStatus['purchaseInward'].= 'Inward: '.$rec->date_added.'<br>';
                                                $BK = str_replace([' ', ':', '-'], "", $rec->date_added);
                                                $stockData[$BK] = 'Inward: '.$rec->date_added.'<br>';
                                            }
                                            if(!(in_array($stockBarcode->barcode, $poBarcodes))) {
                                                $poBarcodes[] = $stockBarcode->barcode;
                                            }
                                            $stockComp[$BK] = 'Inward';
                                        }
                                        // sale
                                        
                                        $sql = "SELECT 
                                                    o.id, o.`pos_id`, o.`name`, o.`bill_date`, op.`barcode`, o.`created_at`,o.old_bill_id
                                                FROM 
                                                oc_pos_bills o, 
                                                oc_pos_bill_products op

                                                WHERE o.`id` = op.`bill_id`
                                                AND o.`pos_id` = '".$stockBarcode->warehouse_id."'
                                                AND op.`barcode` = '".$stockBarcode->barcode."'";
                                        $data = \DB::select(\DB::raw($sql));
                                        if(!empty($data)) {
                                            foreach($data as $r => $rec) {
                                                $DT = $rec->created_at;
                                                if($rec->old_bill_id > 0) {
                                                    $sql2 = "select date_added from oc_order where order_id = '".$rec->old_bill_id."'";
                                                    $data2 = \DB::select(\DB::raw($sql2));
                                                    if(!empty($data2[0]->date_added)) {
                                                        $DT = $data2[0]->date_added;
                                                    }
                                                }
                                                $stockStatus['purchaseInward'].= 'Sold: '.$rec->bill_date.'<br>';
                                                $timeStrs = @explode(" ", $rec->created_at);
                                                $timeStr = trim($timeStrs[1]);
                                                $tstamp = $DT; //$timeStr;
                                                $BK = str_replace([' ', ':', '-'], "", $tstamp);
                                                $BK = (int) $BK + 1;
                                                $stockData[$BK] = 'Sold: '.$DT.'<br>';
                                                $stockComp[$BK] = 'Sold';
                                            }
                                        }
                                        // exchange
                                        $sql = "SELECT 
                                                    c.`id`,
                                                    c.`pos_id`,
                                                    cd.`barcode`,
                                                    cd.`customer_id`,
                                                    CONCAT(cn.`firstname`, cn.`lastname`),
                                                    cd.`date_added`
                                                FROM 

                                                oc_customer_credit_details cd,
                                                oc_customer_credit_note c,
                                                oc_customer cn

                                                WHERE 
                                                c.id = cd.`credit_note_id` 
                                                AND c.`customer_id` = cn.`customer_id` 
                                                AND c.`pos_id` = '".$stockBarcode->warehouse_id."' 
                                                AND cd.`barcode` = '".$stockBarcode->barcode."'";
                                        $data = \DB::select(\DB::raw($sql));
                                        if(!empty($data)) {
                                            foreach($data as $r => $rec) {
                                                $stockStatus['exchange'].= 'Exchange: '.$rec->date_added.'<br>';
                                                $BK = str_replace([' ', ':', '-'], "", $rec->date_added);
                                                $BK = $BK + 1;
                                                $stockData[$BK] = 'Exchange: '.$rec->date_added.'<br>';
                                                $stockComp[$BK] = 'Exchange';
                                            }
                                        }
                                        
                                        // returns
                                        $sql = "SELECT  gr.`id`,
                                                        gr.`reference_no`,
                                                        gr.`approve`,
                                                        grp.`barcode`,
                                                        gr.`created_at`,
                                                        grp.`outwardon`,
                                                        grp.`deliveredon`  
                                                FROM 
                                                    oc_pos_purchase_returns_temp gr,
                                                    oc_pos_purchase_returns_temp_products grp
                                                WHERE
                                                gr.`id` = grp.`return_id`
                                                AND gr.approve = 1
                                                AND gr.`outward` = 1
                                                AND gr.`from_pos` = '".$stockBarcode->warehouse_id."' 
                                                AND grp.`barcode` = '".$stockBarcode->barcode."'";
                                        $data = \DB::select(\DB::raw($sql));
                                        if($stockBarcode->barcode == 'WH1835292') {
                                            // dd($data);
                                        }
                                        if(!empty($data)) {
                                            foreach($data as $r => $rec) {
                                                $stockStatus['gr'].= 'GR: '.$rec->created_at.'<br>';
                                                $BK = str_replace([' ', ':', '-'], "", $rec->created_at);
                                                $BK = $BK;
                                                $stockData[$BK] = 'GR: '.$rec->created_at.'<br>';
                                                $stockComp[$BK] = 'GR';
                                            }
                                        } else {
                                            $sql = "SELECT  gr.`id`,
                                                        gr.`reference_no`,
                                                        gr.`approve`,
                                                        grp.`barcode`,
                                                        gr.`created_at`,
                                                        grp.`infactoryon`,
                                                        grp.`instockon`  
                                                FROM 
                                                    oc_pos_to_wh_sales_returns_temp gr,
                                                    oc_pos_to_wh_sales_returns_temp_products grp
                                                WHERE
                                                gr.`id` = grp.`return_id`
                                                AND gr.approve = 1
                                                AND gr.`instock` = 1
                                                AND gr.`from_pos` = '".$stockBarcode->warehouse_id."' 
                                                AND grp.`barcode` = '".$stockBarcode->barcode."'";
                                                $data = \DB::select(\DB::raw($sql));

                                                if(!empty($data)) {
                                                    foreach($data as $r => $rec) {
                                                        $stockStatus['gr'].= 'GR: '.$rec->instockon.'<br>';
                                                        $BK = str_replace([' ', ':', '-'], "", $rec->instockon);
                                                        $BK = $BK;
                                                        $stockData[$BK] = 'GR: '.$rec->instockon.'<br>';
                                                        $stockComp[$BK] = 'GR';
                                                    }
                                                }
                                        }
                                        
                                        

                                        ksort($stockData);
                                        ksort($stockComp);

                                        $actualStatus = '';
                                        $expectedStatus = end($stockComp);
                                        if($stockBarcode->barcode == 'WH1835292') {
                                            // dump($sql);
                                            // dd($stockStatus['gr']);
                                            // dump($stockComp);
                                            // dump($stockData);
                                            // exit;
                                        }
                                        $inStockStatuses = ['Inward', 'Base', 'Exchange'];
                                        $outStockStatuses = ['Sold', 'GR'];

                                        if($stockBarcode->qty > 0 && in_array($expectedStatus, $inStockStatuses)) {
                                            // product is in stock
                                            $actualStatus = 'Matching';
                                        } elseif($stockBarcode->qty <= 0 && in_array($expectedStatus, $outStockStatuses)) {
                                            // product is in stock
                                            $actualStatus = 'Matching';
                                        } elseif(sizeof($stockData) <= 0) {
                                            $actualStatus = 'Missing';
                                        } else {
                                            $actualStatus = 'Mismatch';
                                        }

                                        $sql = "SELECT * FROM `oc_audit_barcode_scans` WHERE warehouse_id = '".$stockBarcode->warehouse_id."' AND barcode = '".$stockBarcode->barcode."'";
                                        $data = \DB::select(\DB::raw($sql));
                                        if(!empty($data)) {
                                            $sc = 'Scanned';
                                            $inScan = 'Yes';
                                        } else {
                                            $inScan = 'No';
                                            $sc = 'NotScanned';
                                        }
                                        if($actualStatus != 'Missing') {
                                            if($stockBarcode->barcode == 'WH1835292') {
                                                // dd($data);
                                            }
                                            if(!empty($data)) {
                                                if($stockBarcode->qty > 0) {
                                                    $actualStatus = 'Matching';
                                                } else {
                                                    $actualStatus = 'Mismatch';
                                                }
                                            } else {
                                                if($stockBarcode->qty < 1) {
                                                    $actualStatus = 'Matching';
                                                } else {
                                                    $actualStatus = 'Mismatch';
                                                }
                                            }
                                        }

                                @endphp
                                <tr class="itemRow
                                {{ $sc }}
                                    @foreach($stockComp as $ss)
                                    {{ $ss }}
                                    @endforeach
                                    {{ $actualStatus }}
                                    {{ $stockBarcode->qty == 0 ? 'qty0' : 'Qty' }}
                                    {{ $expectedStatus == 'Inward' ? 'InwardOnly' : '' }}
                                    {{ $expectedStatus == 'Sold' ? 'SoldOnly' : '' }}
                                    {{ $expectedStatus == 'Exchange' ? 'ExchangeOnly' : '' }}
                                    {{ $expectedStatus == 'Base' ? 'BaseOnly' : '' }}
                                    {{ $expectedStatus == 'GR' ? 'GROnly' : '' }}
                                    ">
                                    <td>{{ $stockBarcode->article }}</td>
                                    <td>{{ $stockBarcode->color }}</td>
                                    <td>{{ $stockBarcode->size }}</td>
                                    <td>{{ $stockBarcode->barcode }}</td>
                                    <td>{{ $stockBarcode->mrp }}</td>
                                    <td>{{ $stockBarcode->qty }}</td>
                                    <td>
                                        @foreach($stockData as $k => $v)
                                       @if(!empty($v))
                                       <span style="display:block;padding:2px;font-size:11px;margin-top:1px;margin-bottom:2px;background-color:#ececec;color:#454545;border:1px solid #dcdcdc;border-radius:5px;">
                                        {!! $v !!}
                                        </span>
                                        @endif
                                       @endforeach
                                    </td>
                                    <td class="d-none">
                                       @php
                                           $barcodeHistories = $barcodeInfo[$stockBarcode->barcode];
                                           foreach($barcodeHistories as $barcodeHistoryItems) {
                                           foreach($barcodeHistoryItems as $barcodeHistory) {

                                        @endphp
                                        <span style="display:block;padding:2px;font-size:11px;margin-top:1px;margin-bottom:2px;background-color:#ececec;color:#454545;border:1px solid #dcdcdc;border-radius:5px;">
                                        {{ 
                                            $barcodeHistory['source'] . ': ' . date('d/m/Y', strtotime($barcodeHistory['date']))
                                         }}
                                        </span>
                                        @php
                                           }}
                                       @endphp
                                    </td>
                                    <td>
                                        {{ $expectedStatus }}
                                    </td>
                                    <td>
                                        {{ $actualStatus }}
                                    </td>
                                    <td>
                                        {{ $inScan }}
                                    </td>
                                </tr>
                                @php
                                    if(!empty(request('barcode')) && request('barcode') == $stockBarcode->barcode) {
                                        break;
                                    }
                                @endphp
                            @endforeach
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    @endif
    <form name="inwardRep" action="{{ route('pos-stock-status-inward') }}" method="post">
        @csrf
    <input type="hidden" name="repType" value="Inward">
    <input type="hidden" name="store" value="{{ request('store') }}">
    @if(!empty($poBarcodes))
    <input type="hidden" name="barcodes" id="poBarcodes" value="{{ @implode(",", $poBarcodes) }}">
    @else
    <input type="hidden" name="barcodes" id="poBarcodes" value="">
    @endif
    </form>

    <form name="exportCurrent" action="{{ route('pos-stock-status-inward') }}" method="post">
        @csrf
    <input type="hidden" name="repType" value="General">
    <input type="hidden" name="store" value="{{ request('store') }}">
    <input type="hidden" name="html" id="html" value="">
    </form>



@endsection

@section('extraJs')
<script>
    function filterList() {
    $('.itemRow').hide();
    $('.itemRow').removeClass('finalOutput');
    var finalClass = [];  
    $('input:checkbox.filterb').each(function () {
        var sThisVal = (this.checked ? $(this).val() : "");
        if(sThisVal != '') {
            finalClass.push(sThisVal);  
        }
    });

    
    if(finalClass.length > 0) {
        $("."+finalClass.join(".")).show();
        $("."+finalClass.join(".")).addClass('finalOutput');
        $(".totItems").html($('.finalOutput').length);
    } else {
        $(".itemRow").show();
        $(".totItems").html($('.itemRow').length);
    }
}


function fnExcelReport()
{
    document.exportCurrent.html.value = $(".table-responsive").html();
    document.exportCurrent.submit();
}
</script>
@endsection
