<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\URL;
use App\User;
use App\Book_detail;
use App\Assign_contributor;
use PDF;
use Barryvdh\Snappy;
use Excel;

class BooksalesController extends Controller
{
    /**
    * Create a new controller instance.
    *
    * @return void
    */

    public function __construct(){
        $this->middleware('auth');
    }
    protected $varq=array(); #global variable containing royalty due of previous quarters
    /**
    previous quarter > book by title
    **/
    #code updated on 5 July 2018 : added royalty choice checks
    #code updated on 9 July 2018 : added royalty choice checks
    #diamond query updated on 16 July 2018
    #updated INTERNATIONAL_NON-DIRECT_MARKET_store/SHORTAGe with INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES on 26 July 2018

    public function download_bookreport_prev_quar(Request $request){

        #global array
        $this->varq[] = [];
        #logged in user  :added when redirected from the contributor's dashboard
        if(isset($_GET['added_by'])){#dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #contributors list
        if(isset($_GET['contri_id'])){
           $contri_id[] = $_GET['contri_id'];
        }else{
            #means report for all contributor is clicked
            try{
                $contributors_raw = DB::raw('(select users.id,users.name, users.email, users.country, users.state, users.city ,users.merged_contributor,users.added_by,users.login_type,contributionsdata.contributions from  (select distinct assign_contributors.contributor_id, count(distinct book_details.id) as contributions from assign_contributors LEFT JOIN book_details ON book_details.id = assign_contributors.book_id where book_details.merged_book  <> 1 group by contributor_id ) as contributionsdata left join users on contributionsdata.contributor_id = users.id where login_type = 2) as contridet');
                $all_contributors = DB::table('contridet')
                ->select('contridet.id')
                ->from($contributors_raw)
                ->leftJoin('country', function ($join) {
                    $join->on('contridet.country', '=', 'country.id');
                })
                ->leftJoin('state', function ($join) {
                    $join->on('contridet.state', '=', 'state.id');
                })
                ->leftJoin('city', function ($join) {
                    $join->on('contridet.city', '=', 'city.id');
                })
                ->where(function ($query) {
                    $query->where('contridet.merged_contributor','!=',1)
                    ->orWhereNull('contridet.merged_contributor');
                })
                ->where('added_by',$id)
                ->where('login_type', 2)
                ->Get();
            }catch(\Exception $e){
                return $e->getMessage()."Line no_a ".$e->getLine(); 
            }
            $contri_id = array(); 
            foreach($all_contributors as $contributors){
                $contributors = get_object_vars($contributors);
                $contri_id[] = $contributors['id'];
            }
        }
        #current quarter
        $current = floor((date('n') - 1) / 3);
        #quarter calculation
        $year = date('y');
        $quarters = array();
        $q = "";
        $mysql_qty = "";
        for ($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        $mysql_qty = $q;
        #selected quarter
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        $mysql_qty = $selected_quarter;
        #current year
        $current_year= date('Y');
        #selected year
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year;
        }else{
            $selected_year = \Session::get('selected_year');
        }    
        #default dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #selected dates
        #week from
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }  
        #week to
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        }
        #start and end dates of quarter
        #quarter1
        $q1_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
        $q1_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((1 * 3)) . '-1'));
        #quarter2
        $q2_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((2 * 3) - 2) . '-1'));
        $q2_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((2 * 3)) . '-1'));
        #quarter3
        $q3_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((3 * 3) - 2) . '-1'));
        $q3_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((3 * 3)) . '-1'));
        ##quarter in words 
        if($selected_quarter == 1){
            $selected_quarter_words ='first_quarter';
        }
        if($selected_quarter == 2){
            $selected_quarter_words = 'second_quarter';
        }
        if($selected_quarter == 3){
            $selected_quarter_words = 'third_quarter';
        }
        if($selected_quarter == 4){
            $selected_quarter_words ='fourth_quarter';
        }
        if($selected_quarter == 5){
            $selected_quarter_words = 'custom_quarter';
        }

        #get books assigned to contributor : used for getting the sales
        try{
            $book_ids_db = DB::Table('assign_contributors')
            ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage','book_details.out_of_print','book_details.disabled_book')
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
             ->leftJoin('book_details', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->wherein('assign_contributors.contributor_id',$contri_id)
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            ->distinct('assign_contributors.book_id')
            ->get() ->toArray();
        }catch(\Exception $e){
           return $e->getMessage();
        }
        #book ids later filtered disabled and out of print
        $book_ids_old = array();
        #contributor_based book ids for containers
        $container_b_id_old = array();
        #collects items out of print
        $op_books = array(); 
        #collection of the contributor
        $contributors_ids = array();
        #disabled books
        $disabled_books = array();
        #collecting the book ids and percentages of the contributor
        foreach($book_ids_db as $item){           
            $item = get_object_vars($item);
            $book_ids_old[]=$item['book_id'];
            #collect percentage
            $contributors_ids1[$item['contributors_id']][$item['book_id']]['percentage'][]=$item['percentage'];
            $totals_percentage = array_sum($contributors_ids1[$item['contributors_id']][$item['book_id']]['percentage']);
            #adding percentage in the array
            $contributors_ids[$item['contributors_id']][$item['book_id']]=  [
            'contri_id'=>$item['contributors_id'],
            'contri_name'=>$item['name'],
            'percentage'=>$totals_percentage,
            ];
            $container_b_id_old[$item['contributors_id']][]=$item['book_id'];
            #collect out print books
            if($item['out_of_print'] == 1){
                $op_books[] = $item['book_id'];
            }
            #disabled book
            if($item['disabled_book']==1){
                $disabled_books[] = $item['book_id'];
            }
        }
        $book_ids_old = array_unique($book_ids_old);
        $disabled_books = array_unique($disabled_books);

        ####FILTER FOR THE BOOKS HERE###############
        ##OUT OF PRINT
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }

        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $book_ids = array();
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
            foreach($op_books as $key=> $ids){
                if($selected_quarter != 1){ #selected quarter shud to be more than 1
                $prev_q = $selected_quarter-1;
                    if(isset($out_print_array[$ids])){
                        foreach($out_print_array[$ids] as $things){
                            if($things['year']==$selected_year){
                                $op_q = explode(',',$things['quarters']);
                                if(!in_array($prev_q,$op_q)){
                                    $not_ids[] = $ids;
                                }
                            }
                        }
                    }else{
                        $not_ids[] = $ids;
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $book_ids = array_diff($book_ids_old, $not_ids);
        $book_ids = $book_ids_old;
        $book_ids = array_unique(array_values(array_diff($book_ids, $disabled_books)));
        $prevent_ids = array_merge($not_ids, $disabled_books);
        if(empty($book_ids)){ #means all the books are disabled.
            $empty_balance = array();
            foreach($contri_id as $id){
                foreach($disabled_books as $b_id){
                    $empty_balance[$id][$b_id]= 0; 
                }
            }
            $this->varq = $empty_balance;
        }
        $container_b_id = array();

        foreach($container_b_id_old as $c_id => $ids){
            $ids = array_unique(array_values(array_diff($ids, $prevent_ids)));
            $container_b_id[$c_id] = $ids;
        }
        #####FILTER FOR THE BOOKS END HERE ##############
        #container items 
        try{

            $get_containted = DB::table('book_vol_containers')
            ->select('book_vol_containers.book_main_id','book_vol_containers.contained_book_id',
                'book_main.contributor_id as main_contri','book_sub.contributor_id as sub_contri')
            ->wherein('book_vol_containers.book_main_id',$book_ids)
            #where not in starts
            ->whereNotIn('book_vol_containers.book_main_id',$not_ids)
            ->whereNotIn('book_vol_containers.contained_book_id',$not_ids)
            ->whereNotIn('book_main.book_id',$not_ids)
            #where not in ends
            #where not in disabled starts
            ->whereNotIn('book_vol_containers.book_main_id',$disabled_books)
            ->whereNotIn('book_vol_containers.contained_book_id',$disabled_books)
            ->whereNotIn('book_main.book_id',$disabled_books)
            #where not in disabled ends
             ->leftJoin('assign_contributors as book_main', function ($join) {
                $join->on('book_vol_containers.book_main_id', '=', 'book_main.book_id');
            })
            ->leftJoin('assign_contributors as book_sub', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'book_sub.book_id');
            })
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }        

        $unsorted_container_list = array();
        foreach($get_containted as $item){
            $item = get_object_vars($item);
            if(isset($container_b_id[$item['main_contri']])){
                if($container_b_id[$item['main_contri']])
                if(in_array($item['book_main_id'],$container_b_id[$item['main_contri']]) && in_array($item['contained_book_id'],$container_b_id[$item['main_contri']])){
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = $item['contained_book_id'];
                }else{
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = '';
                }
            }
        }

        #sort out the array
        $container_list = array();
        foreach($unsorted_container_list as $c_id => $b_ids){
            foreach ($b_ids as $main => $ids) {
               rsort($ids);
               $container_list[$c_id][$main]=array_values(array_unique($ids));
            }
        }

        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        #fetching the royalty choice of the item
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        $print_pr = array(); #print choice, used i royalty choice = cover price
        $royalty_choice = array(); #royalty choice, later used in royalty due calc
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice'];
            $print_pr[$item['id']] = $item['print_price'];
        }
        
        #arrays
        $contributors1 = array();#diamond sales
        $total_profit = array();#total profit : gross sales - expense
        $gross_sales = array();#gross sales : total of all the sales
        $digital_info1 = array();#digital sales
        $digital_qty1 = array();#digital sales

        #arrays 2nd quarter
        $contributors2 = array();
        $total_profit2 = array();
        $gross_sales2 = array();
        $digital_info2 = array();
        $digital_qty2 = array();#digital sales

        #arrays 3rd quarter
        $contributors3 = array();
        $total_profit3 = array();
        $gross_sales3 = array();
        $digital_info3 = array();
        $digital_qty3 = array();#digital sales
       
        ##digital_report
        ##amazon
        try{
        $amazon_sales = DB::Table('book_details')
        ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units')

        ->leftJoin('amazon_sales_reports', function ($join) {
        $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
        })
        ->wherein('book_details.id',$book_ids)
        ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['amazon_invoice_date'] >= $q1_first_date && $item['amazon_invoice_date']<=$q1_last_date || empty($item['amazon_invoice_date'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty1[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0; 
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['amazon_invoice_date'] >= $q2_first_date && $item['amazon_invoice_date']<=$q2_last_date || empty($item['amazon_invoice_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['amazon_invoice_date'] >= $q3_first_date && $item['amazon_invoice_date']<=$q3_last_date || empty($item['amazon_invoice_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['amazon_total'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['net_units']; 
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0; 
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }
        }

        ##Apple
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['apple_start_date']>=$q1_first_date && $item['apple_start_date']<=$q1_last_date || empty($item['apple_start_date'])){

                $digital_info1[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty1[$item['book_id']]['qty'][]=$item['quantity'];      
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;
                $digital_qty1[$item['book_id']]['qty'][]=0;  
            }
            #quarter 2
            if($item['apple_start_date']>=$q2_first_date && $item['apple_start_date']<=$q2_last_date || empty($item['apple_start_date'])){

                $digital_info2[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty2[$item['book_id']]['qty'][]=$item['quantity']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 3
            if($item['apple_start_date']>=$q3_first_date && $item['apple_start_date']<=$q3_last_date || empty($item['apple_start_date'])){

                $digital_info3[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['quantity'];   
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }               
        }

        ##barnes and nobles
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_invoice_date']>=$q1_first_date && $item['custom_invoice_date']<=$q1_last_date || empty($item['custom_invoice_date'])){

                $digital_info1[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            } 
            #quarter 2
            if($item['custom_invoice_date']>=$q2_first_date && $item['custom_invoice_date']<=$q2_last_date || empty($item['custom_invoice_date'])){

                $digital_info2[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 3
            if($item['custom_invoice_date']>=$q3_first_date && $item['custom_invoice_date']<=$q2_last_date || empty($item['custom_invoice_date'])){

                $digital_info3[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty3[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0; 
            }                
        }

        ##comixology
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1 
            if($item['custom_sale_date_comix']>=$q1_first_date && $item['custom_sale_date_comix']<=$q1_last_date || empty($item['custom_sale_date_comix'])){

                $digital_info1[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 2
            if($item['custom_sale_date_comix']>=$q2_first_date && $item['custom_sale_date_comix']<=$q2_last_date || empty($item['custom_sale_date_comix'])){

                $digital_info2[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 3
            if($item['custom_sale_date_comix']>=$q3_first_date && $item['custom_sale_date_comix']<=$q3_last_date || empty($item['custom_sale_date_comix'])){

                $digital_info3[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['sum_of_quantity'];  
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0; 
            } 
        }

        ##comixology subscription
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }

        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1 
            if($item['custom_date_comix_subs']>=$q1_first_date && $item['custom_date_comix_subs']<=$q1_last_date || empty($item['custom_date_comix_subs'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 2
            if($item['custom_date_comix_subs']>=$q2_first_date && $item['custom_date_comix_subs']<=$q2_last_date || empty($item['custom_date_comix_subs'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 3
            if($item['custom_date_comix_subs']>=$q3_first_date && $item['custom_date_comix_subs']<=$q3_last_date || empty($item['custom_date_comix_subs'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty3[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0; 
            } 
        }

        ##google
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_sale_date_google']<=$q1_last_date && $item['custom_sale_date_google']>=$q1_first_date || empty($item['custom_sale_date_google'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            } 
            #quarter 2
            if($item['custom_sale_date_google']<=$q2_last_date && $item['custom_sale_date_google']>=$q2_first_date || empty($item['custom_sale_date_google'])){

                $digital_info2[$item['book_id']]['sales_info'][]=$item['earnings_amount']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['quantity']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            } 
            #quarter 3
            if($item['custom_sale_date_google']<=$q3_last_date && $item['custom_sale_date_google']>=$q3_first_date || empty($item['custom_sale_date_google'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['earnings_amount']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['quantity']; 
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            } 
        }

        ##oni press sales
        $oni_amount1 = array();
        $oni_amount2 = array();
        $oni_amount3 = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_sale_date_oni_con']<=$q1_last_date && $item['custom_sale_date_oni_con']>=$q1_first_date || empty($item['custom_sale_date_oni_con'])){
                 $oni_amount1[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $digital_qty1[$item['book_id']]['qty'][]=$item['items_sold']; 
            }else{
                $oni_amount1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 2
            if($item['custom_sale_date_oni_con']<=$q2_last_date && $item['custom_sale_date_oni_con']>=$q2_first_date || empty($item['custom_sale_date_oni_con'])){
                $oni_amount2[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['items_sold']; 
            }else{
                $oni_amount2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            } 
            #quarter 3
            if($item['custom_sale_date_oni_con']<=$q3_last_date && $item['custom_sale_date_oni_con']>=$q3_first_date || empty($item['custom_sale_date_oni_con'])){
                $oni_amount3[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['items_sold']; 
            }else{
                $oni_amount3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }           
        }

        ##oni Shopify sales
        $oni_shop_amount1 = array();
        $oni_shop_amount2 = array();
        $oni_shop_amount3 = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_date']<=$q1_last_date && $item['custom_date']>=$q1_first_date || empty($item['custom_date'])){
                 $oni_shop_amount1[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $digital_qty1[$item['book_id']]['qty'][]=$item['net_quantity']; 
            }else{
                $oni_shop_amount1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            } 
            #quarter 2
            if($item['custom_date']<=$q2_last_date && $item['custom_date']>=$q2_first_date || empty($item['custom_date'])){
                $oni_shop_amount2[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['net_quantity']; 
            }else{
                $oni_shop_amount2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            } 
            #quarter 3
            if($item['custom_date']<=$q3_last_date && $item['custom_date']>=$q3_first_date || empty($item['custom_date'])){
                $oni_shop_amount3[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['net_quantity']; 
            }else{
                $oni_shop_amount3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }
        }

        ##s & s sales
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.dollar_net','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no s_s_sale_reports info '.$e->getLine();
        }

        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_invoice_date']<=$q1_last_date && $item['custom_invoice_date']>=$q1_first_date || empty($item['custom_invoice_date'])){

                 $digital_info1[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty1[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            } 
            #quarter 2
            if($item['custom_invoice_date']<=$q2_last_date && $item['custom_invoice_date']>=$q2_first_date || empty($item['custom_invoice_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty2[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            } 
            #quarter 3
            if($item['custom_invoice_date']<=$q3_last_date && $item['custom_invoice_date']>=$q3_first_date || empty($item['custom_invoice_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }           
        }

        #diamond sales
        #breaking into comma sepearted values
        $contri_id1 = implode(',', $contri_id);
        $book_ids1 = implode(',', $book_ids);

        #first quarter
        $q1_last_date = trim($q1_last_date);
        $q1_first_date = trim($q1_first_date);
        try{
            $diamond_first = DB::select("select DISTINCT book_details.id as book_id, assign_contributors.contributor_id as id,users.name,users.merged_contributor, book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_from <= '".$q1_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q1_last_date."' and book_financials.week_to >= '".$q1_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id  left join assign_contributors on assign_contributors.book_id = book_details.id left join users on users.id = assign_contributors.contributor_id where assign_contributors.contributor_id IN (".$contri_id1.") and book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  and (book_details.merged_book != 1 OR book_details.merged_book IS NULL) and (users.merged_contributor != 1 OR users.merged_contributor IS NULL)  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        #second quarter
        $q2_last_date = trim($q2_last_date);
        $q2_first_date = trim($q2_first_date);
        try{
            $diamond_sec =  DB::select("select DISTINCT book_details.id as book_id, assign_contributors.contributor_id as id,users.name,users.merged_contributor, book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_from <= '".$q2_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q2_last_date."' and book_financials.week_to >= '".$q2_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id  left join assign_contributors on assign_contributors.book_id = book_details.id left join users on users.id = assign_contributors.contributor_id where assign_contributors.contributor_id IN (".$contri_id1.") and book_details.added_by = ".$id."  and book_details.id IN (".$book_ids1.")  and (book_details.merged_book != 1 OR book_details.merged_book IS NULL) and (users.merged_contributor != 1 OR users.merged_contributor IS NULL)  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        #third quarter
        $q3_last_date = trim($q3_last_date);
        $q3_first_date = trim($q3_first_date);
        try{
            $diamond_third =  DB::select("select DISTINCT book_details.id as book_id, assign_contributors.contributor_id as id,users.name,users.merged_contributor, book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_from <= '".$q3_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q3_last_date."' and book_financials.week_to >= '".$q3_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id  left join assign_contributors on assign_contributors.book_id = book_details.id left join users on users.id = assign_contributors.contributor_id where assign_contributors.contributor_id IN (".$contri_id1.") and book_details.added_by = ".$id."  and book_details.id IN (".$book_ids1.")   and (book_details.merged_book != 1 OR book_details.merged_book IS NULL) and (users.merged_contributor != 1 OR users.merged_contributor IS NULL)  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        #expenses
        try{
            $expenses = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
            ->leftJoin('book_expenses', function ($join) {
            $join->on('book_details.id', '=', 'book_expenses.book_id');
            })
            ->whereIn('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage()." Line no expenses_ids ".$e->getLine();
        }

        #for custom quarter
        $qtrs_val=array();
        if($selected_quarter == 5){
            $selected_q = 'Custom Quarter (Jan - Dec)'; 
            $month1 = date('m', strtotime($week_from));//get the quarter of week from date
            $q1 = ceil($month1/3);
            $month2 = date('m', strtotime($week_to));//get the quarter of week to date
            $q2 = ceil($month2/3);  
            for($qtrs=$q1; $qtrs <= $q2; $qtrs++){//collect the quarter in array
                $qtrs_val[]=$qtrs;
            }
        }

        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            #if not custom quarter
            if($selected_quarter != 5){
                if(in_array($item['id'], $book_ids)){
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $expense[$item['id']]['q1'] = $item['first_quarter'];
                        $expense[$item['id']]['q2'] = $item['second_quarter'];
                        $expense[$item['id']]['q3'] = $item['third_quarter'];
                        $expense[$item['id']]['q4'] = $item['fourth_quarter'];
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                            $expense[$item['id']]['q1'] = 0;
                            $expense[$item['id']]['q2'] = 0;
                            $expense[$item['id']]['q3'] = 0;
                            $expense[$item['id']]['q4'] = 0;
                        }
                    }
                }else{
                    $expense[$item['id']]['q1'] = 0;
                    $expense[$item['id']]['q2'] = 0;
                    $expense[$item['id']]['q3'] = 0;
                    $expense[$item['id']]['q4'] = 0;
                }
                #if custom quarter sum up all the values
            }else{
                if(in_array($item['id'], $book_ids)){
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $all_qtr_sum =0;
                        foreach($qtrs_val as $qtr){  
                            if($qtr == 1){
                                $all_qtr_sum +=$item['first_quarter'];
                            }
                            if($qtr == 2){
                                $all_qtr_sum +=$item['second_quarter'];
                            }
                            if($qtr == 3){
                                $all_qtr_sum +=$item['third_quarter'];
                            }
                            if($qtr == 4){
                                $all_qtr_sum +=$item['fourth_quarter'];
                            }
                        }
                        $expense[$item['id']] =$all_qtr_sum;
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                          $expense[$item['id']]=0;  
                        }
                    }
                }else{
                    $expense[$item['id']] = 0;
                }
            }#ends condition for quarter   
        }#ends expense foreach
        
        ##DIAMOND ARRAY 
        foreach($diamond_first as $item) {
            $item = get_object_vars($item);
            $contributors1[$item['id']]['user_details']['id']= $item['id'];
            $contributors1[$item['id']]['user_details']['name']= $item['name'];

            #DIRECT_MARKET_STORES
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES' ){

                    $qq_DMS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_DMS[$item['id']][$item['book_id']][$item['market']]= trim($item['unit_retails']);
                    $t_c_DMS[$item['id']][$item['book_id']][$item['market']]= trim($item['total_cost']);
                    $d_p_DMS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_DMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_DMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }   
            }
            if(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']) ){

                $contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']= 
                [
                'store'=>'DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' =>0,
                'total_cost' =>0,
                'total_cost3' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,         
                ];
            }
                
            #DIRECT_SHORTAGE_/_DAMAGE
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                
                    $qq_DMSh[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_DMSh[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_DMSh[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_DMSh[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_DMSh[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_DMSh[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_DMSh[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_DMSh[$item['id']][$item['book_id']][$item['market']],   
                    ];
                } 
            }if(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']) ){
                $contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,
                ];
            }   

            #NON-DIRECT_MARKET_STORES
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) === 'NON-DIRECT_MARKET_STORES'){
                    $qq_NDMS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_NDMS[$item['id']][$item['book_id']][$item['market']] = [trim($item['unit_retails'])];
                    $t_c_NDMS[$item['id']][$item['book_id']][$item['market']] = [trim($item['total_cost'])];
                    $d_p_NDMS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_NDMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' => array_sum( $u_r_NDMS[$item['id']][$item['book_id']][$item['market']]),
                    'total_cost' => array_sum( $t_c_NDMS[$item['id']][$item['book_id']][$item['market']]),
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_NDMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
              
            }if(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES'])){

                $contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' =>0,
                'total_cost' =>0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            #NON-DIRECT_SHORTAGE
            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){

                    $qq_NDS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_NDS[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_NDS[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_NDS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_NDS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_NDS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }if(empty(array_search('NON-DIRECT_SHORTAGE',$item, true))  && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']) ){ 
                $contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']= 
                [
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=> 0
                ];
            }

            #INTERNATIONAL_NON-DIRECT_MARKET_STORES
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    $qq_inter1[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $tt_INDM1[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $tc_INDM1[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_inter1[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);

                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_inter1[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$tt_INDM1[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$tc_INDM1[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_inter1[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'])){
                $contributors1[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,

                ];
            }

            #INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){

                    $qq_INDMS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_INDMS[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_INDMS[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_INDMS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_INDMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_INDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_INDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_INDMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'])){
                $contributors1[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,
                ];   
            }

            #DIRECT_RETURNS
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                   
                    $qq_DS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_DS[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_DS[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_DS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_DS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_DS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_DS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_DS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }if(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']) ){
                $contributors1[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']=
                [
                'store'=>'DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            #NON-DIRECT_RETURNS
            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    $qq_nDS[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);

                    $u_r_nDS[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_nDS[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_nDS[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors1[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_nDS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_nDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_nDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_nDS[$item['id']][$item['book_id']][$item['market']],  
                     ];
                }
            }
            if(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset($contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']) ){
                $contributors1[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']=
                [
                'store'=>'NON-DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
        }

        ##DIAMOND ARRAY SECOND QUARTER
        foreach($diamond_sec as $item){
            $item = get_object_vars($item);
            $contributors2[$item['id']]['user_details']['id']= $item['id'];
            $contributors2[$item['id']]['user_details']['name']= $item['name'];
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES' ){
                    $qq2_DMS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_DMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_DMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']) ){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']= 
                [
                'store'=>'DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,   
                ];
            }
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    $qq2_DSH[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_DSH[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_DSH[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_DSH[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_DSH[$item['id']][$item['book_id']][$item['market']],   
                    ];
                } 
            }
            if(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']) ){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) === 'NON-DIRECT_MARKET_STORES'){
                    $qq2_NDMS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);

                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_NDMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_NDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_NDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_NDMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES'])){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' =>0,
                'total_cost' =>0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    $qq2_NDS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_NDS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_NDS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_NDS[$item['id']][$item['book_id']][$item['market']]=trim($item['desc_percentage']);

                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_NDS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_NDS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('NON-DIRECT_SHORTAGE',$item, true))  && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']) ){ 
                $contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']= 
                [
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=> 0,
                ];
            }

            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    $qq2_INDM[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_INDM[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_INDM[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_INDM[$item['id']][$item['book_id']][$item['market']]=trim($item['desc_percentage']);
                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_INDM[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_INDM[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_INDM[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_INDM[$item['id']][$item['book_id']][$item['market']],   
                     ];
                } 
            }
            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'])){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,

                ];
            }
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    $qq2_INDMS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_INDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_INDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_INDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);

                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_INDMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_INDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_INDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_INDMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                } 
            }
            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'])){

                $contributors2[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){

                if(trim($item['market']) == 'DIRECT_RETURNS'){

                    $qq2_DR[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_DR[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_DR[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_DR[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);

                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_DR[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_DR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_DR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_DR[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']) ){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']= 
                [
                'store'=>'DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){

                    $qq2_NDR[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r2_NDR[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c2_NDR[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd2_NDR[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);

                    $tt2_NDR[$item['id']][$item['book_id']][$item['market']][]=trim($item['total_cost']);
                    $contributors2[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq2_NDR[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r2_NDR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c2_NDR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd2_NDR[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }
            if(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset($contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']) ){
                $contributors2[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']=
                [
                'store'=>'NON-DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
        }

        #DIAMOND SALE ARRAY : THIRD
        foreach ($diamond_third as $item) {
            $item = get_object_vars($item);
            $contributors3[$item['id']]['user_details']['id']= $item['id'];
            $contributors3[$item['id']]['user_details']['name']= $item['name'];
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'DIRECT_MARKET_STORES' ){
                $qq3_DMS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                $u_r3_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                $t_c3_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                $dd3_DMS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [  
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_DMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_DMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd3_DMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }if(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']) ){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_MARKET_STORES']=[
                    'store'=>'DIRECT_MARKET_STORES',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost3.1' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>0, 
                    ];
            }
                
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){    
                    $qq3_DSH[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r3_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c3_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd3_DSH[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_DSH[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_DSH[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_DSH[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd3_DSH[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }       
              
            }if(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']) ){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
                
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) === 'NON-DIRECT_MARKET_STORES'){
                    $qq3_NDMS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r3_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c3_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd3_NDMS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_NDMS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_NDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_NDMS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd3_NDMS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
                
            }if(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES'])){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' =>0,
                'total_cost' =>0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    $qq3_NDS[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r3_NDS[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c3_NDS[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd3_NDS[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);

                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_NDS[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_NDS[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd3_NDS[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
               
            }if(empty(array_search('NON-DIRECT_SHORTAGE',$item, true))  && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']) ){ 
            $contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=> 0,
                ];  
            }

            #international

            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    $qq3_INDM[$item['id']][$item['book_id']][$item['market']][]=trim($item['qty_sold']);
                    $u_r3_INDM[$item['id']][$item['book_id']][$item['market']] =trim($item['unit_retails']);
                    $t_c3_INDM[$item['id']][$item['book_id']][$item['market']] =trim($item['total_cost']);
                    $dd3_INDM[$item['id']][$item['book_id']][$item['market']] =trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_INDM[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_INDM[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_INDM[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$dd3_INDM[$item['id']][$item['book_id']][$item['market']],  
                    ];
                }
            }

            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'])){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' =>0,
                'total_cost' =>0,
                'total_cost3' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    $qq_INDMSH_3[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r_INDMSH_3[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c_INDMSH_3[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p_INDMSH_3[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq_INDMSH_3[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r_INDMSH_3[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c_INDMSH_3[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p_INDMSH_3[$item['id']][$item['book_id']][$item['market']],
                    ];
                } 
            }

            if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'])){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                [
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0,
                ];
            }

            #returns

            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    $qq3_DR[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r3_DR[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c3_DR[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p3_DR[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_DR[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_DR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_DR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p3_DR[$item['id']][$item['book_id']][$item['market']],   
                    ];
                }
            }

            if(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']) ){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['DIRECT_RETURNS']=
                [
                'store'=>'DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }

            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    $qq3_NDR[$item['id']][$item['book_id']][$item['market']][] = trim($item['qty_sold']);
                    $u_r3_NDR[$item['id']][$item['book_id']][$item['market']] = trim($item['unit_retails']);
                    $t_c3_NDR[$item['id']][$item['book_id']][$item['market']] = trim($item['total_cost']);
                    $d_p3_NDR[$item['id']][$item['book_id']][$item['market']] = trim($item['desc_percentage']);
                    $contributors3[$item['id']]['calculas'][$item['book_id']][$item['market']]= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => array_sum($qq3_NDR[$item['id']][$item['book_id']][$item['market']]),
                    'unit_retails' =>$u_r3_NDR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost' =>$t_c3_NDR[$item['id']][$item['book_id']][$item['market']],
                    'total_cost3' => 0,
                    'book_id'=>$item['book_id'],
                    'discount'=>$d_p3_NDR[$item['id']][$item['book_id']][$item['market']],
                    ];
                }
            }

            if(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset($contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']) ){
                $contributors3[$item['id']]['calculas'][$item['book_id']]['NON-DIRECT_RETURNS']=
                [
                'store'=>'NON-DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost3.1' => 0,
                'book_id'=>$item['book_id'],
                'discount'=>0
                ];
            }
        }#end foreach

        #generating book_sales > gross sales
        #quarter 1
        foreach($contributors1 as $c_id => $contributordet){
            $gross_sales = 0;
            $total_qty = 0;
            foreach($contributordet['calculas'] as $book_no1=>$calc){
                #direct 
                $net_direct_revenue =  ($calc['DIRECT_MARKET_STORES']['total_cost'])+( $calc['DIRECT_SHORTAGE_/_DAMAGE']['total_cost'])+( $calc['DIRECT_RETURNS']['total_cost']);
                #non direct
                $net_non_dir_revenue = ($calc['NON-DIRECT_MARKET_STORES']['total_cost'])+( $calc['NON-DIRECT_SHORTAGE']['total_cost']);
                #returns
                $return_revenue =  $calc['NON-DIRECT_RETURNS']['unit_retails'] * $calc['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
                $net_revenue = $calc['NON-DIRECT_RETURNS']['unit_retails']*(1-($calc['NON-DIRECT_RETURNS']['discount']/100)) * $calc['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
                #international
                $net_internatioal_revenue = $calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
                #totals
                $gross_sales = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info1[$book_no1]['sales_info'])+(array_sum($oni_amount1[$book_no1]['sales_info'])*.90)+(array_sum($oni_shop_amount1[$book_no1]['sales_info'])*.90);
                ##QTY
                $total_qty1 = $calc['DIRECT_MARKET_STORES']['qty_sold']+$calc['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$calc['NON-DIRECT_SHORTAGE']['qty_sold']+$calc['NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['NON-DIRECT_RETURNS']['qty_sold']+$calc['DIRECT_RETURNS']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty1[$book_no1]['qty']);
                #total expense #
                $sum = $expense[$book_no1]['q1'];
                ##checking the royalty choice 
                #if choice is 1 i.e. net or if cover price
                if($royalty_choice[$book_no1] == 1 ||$royalty_choice[$book_no1] == NULL){
                    #profit
                    $total_profit = $gross_sales-$sum;
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final1 = $total_profit *$divide_by_val/100;
                }
                #if choice is 2 i.e. gross
                if($royalty_choice[$book_no1] ==2){
                    #profit
                    $total_profit = $gross_sales;
                    $total_profit_final1 = $total_profit;
                }
                #if choice is 3 i.e. gross
                if($royalty_choice[$book_no1] ==3){
                    #profit
                    $total_profit = $gross_sales-$sum;
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final1 = $print_pr[$book_no1] * $total_qty1 * $divide_by_val/100;
                }
                #profit & sales : collect contributor's portion by collecting the 50% of total profit , hence diving it by 2
                $book_reports['book_report'][$contributordet["user_details"]["id"]][]= array('book_id'=>$book_no1,'gross_sales'=>$gross_sales,'total_profit'=>$total_profit_final1,'expense'=>$sum);

            }#calculas foreach ends
        } #main foreach ends

        #quarter 2
        foreach($contributors2 as $c_id2 => $contributordet2){
            $gross_sales2 = 0;
            $total_qty = 0;
            foreach($contributordet2['calculas'] as $book_no2=>$calc){
                #direct 
                $net_direct_revenue =  ($calc['DIRECT_MARKET_STORES']['total_cost'])+( $calc['DIRECT_SHORTAGE_/_DAMAGE']['total_cost'])+( $calc['DIRECT_RETURNS']['total_cost']);
                #non direct
                $net_non_dir_revenue = ($calc['NON-DIRECT_MARKET_STORES']['total_cost'])+( $calc['NON-DIRECT_SHORTAGE']['total_cost']);
                #returns
                $return_revenue =  $calc['NON-DIRECT_RETURNS']['unit_retails'] * $calc['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
                $net_revenue = $calc['NON-DIRECT_RETURNS']['unit_retails']*(1-($calc['NON-DIRECT_RETURNS']['discount']/100)) * $calc['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
                #international
                $net_internatioal_revenue = $calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
                #totals
                $gross_sales2 = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info2[$book_no2]['sales_info'])+(array_sum($oni_amount2[$book_no2]['sales_info'])*.90)+(array_sum($oni_shop_amount2[$book_no2]['sales_info'])*.90);
                ##QTY
                $total_qty2 = $calc['DIRECT_MARKET_STORES']['qty_sold']+$calc['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$calc['NON-DIRECT_SHORTAGE']['qty_sold']+$calc['NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['NON-DIRECT_RETURNS']['qty_sold']+$calc['DIRECT_RETURNS']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty2[$book_no2]['qty']);
                # total expense #
                $sum2 = $expense[$book_no2]['q2'];
                ##checking the royalty choice 
                #if choice is 1 i.e. net
                if($royalty_choice[$book_no2] == 1 || $royalty_choice[$book_no2] == NULL){
                    #profit
                    $total_profit2 = $gross_sales2-$sum2;
                    #contributor's share of portion
                    #collect contributor's portion by collecting total profit , hence diving it by total percentage
                    $divide_by_val = array_sum($percentage_Array[$book_no2]);
                    $total_profit_final2 = $total_profit2 *$divide_by_val/100;
                }
                #if choice is 2 i.e. gross
                if($royalty_choice[$book_no2] == 2){
                    #profit
                    $total_profit2 = $gross_sales2;
                    $total_profit_final2 = $total_profit2;
                }
                #if choice is 3 i.e. gross
                if($royalty_choice[$book_no2] ==3){
                    #profit
                    $total_profit2 = $gross_sales2-$sum2;
                    $divide_by_val = array_sum($percentage_Array[$book_no2]);
                    $total_profit_final2 = $print_pr[$book_no2]* $total_qty2 * $divide_by_val/100;
                }  
                #profit & sales : 
                $book_reports2['book_report'][$contributordet2["user_details"]["id"]][]= array('book_id'=>$book_no2,'gross_sales'=>$gross_sales2,'total_profit'=>$total_profit_final2,'expense'=>$sum2,'digital'=>array_sum($digital_info2[$book_no2]['sales_info'])+(array_sum($oni_amount2[$book_no2]['sales_info'])*.90) +(array_sum($oni_shop_amount2[$book_no2]['sales_info'])*.90) );
            }#calculas foreach ends
        } #main foreach ends
        
        #quarter 3
        foreach($contributors3 as $c_id3 => $contributordet3){
            $gross_sales3 = 0;
            $total_qty = 0;
            foreach($contributordet3['calculas'] as $book_no3=>$calc){
                #direct 
                $net_direct_revenue =  ($calc['DIRECT_MARKET_STORES']['total_cost'])+( $calc['DIRECT_SHORTAGE_/_DAMAGE']['total_cost'])+( $calc['DIRECT_RETURNS']['total_cost']);
                #non direct
                $net_non_dir_revenue = ($calc['NON-DIRECT_MARKET_STORES']['total_cost'])+( $calc['NON-DIRECT_SHORTAGE']['total_cost']);
                #returns
                $return_revenue =  $calc['NON-DIRECT_RETURNS']['unit_retails'] * $calc['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
                $net_revenue = $calc['NON-DIRECT_RETURNS']['unit_retails']*(1-($calc['NON-DIRECT_RETURNS']['discount']/100)) * $calc['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
                #international
                $net_internatioal_revenue = $calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
                #totals
                $gross_sales3 = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info3[$book_no3]['sales_info'])+(array_sum($oni_amount3[$book_no3]['sales_info'])*.90)+(array_sum($oni_shop_amount3[$book_no3]['sales_info'])*.90);
                ##QTY
                $total_qty3 = $calc['DIRECT_MARKET_STORES']['qty_sold']+$calc['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$calc['NON-DIRECT_SHORTAGE']['qty_sold']+$calc['NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['NON-DIRECT_RETURNS']['qty_sold']+$calc['DIRECT_RETURNS']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty3[$book_no3]['qty']);
                # total expense #
                $sum3 = $expense[$book_no3]['q3'];
                ##checking the royalty choice 
                #if choice is 1 i.e. net
                if($royalty_choice[$book_no3] == 1 ||$royalty_choice[$book_no3] == NULL ){
                    #profit
                    $total_profit3 = $gross_sales3-$sum3;
                    #contributor's share of portion
                    #collect contributor's portion by collecting total profit , hence diving it by total percentage                    
                    $divide_by_val = array_sum($percentage_Array[$book_no3]);
                    $total_profit_final3 = $total_profit3 *$divide_by_val/100;
                }
                #if choice is 2 i.e. gross
                if($royalty_choice[$book_no3] == 2){
                    #profit
                    $total_profit3 = $gross_sales3-$sum3;
                    $total_profit_final3 = $total_profit3;
                } 
                #if choice is 3 i.e. cover price
                if($royalty_choice[$book_no3] ==3){
                    #profit
                    $total_profit3 = $gross_sales3-$sum3;
                    $divide_by_val = array_sum($percentage_Array[$book_no3]);
                    $total_profit_final3 = $print_pr[$book_no3] * $total_qty3 * $divide_by_val/100 ;
                } 
                #profit & sales 
                $book_reports3['book_report'][$contributordet3["user_details"]["id"]][]= ['book_id'=>$book_no3,'gross_sales'=>$gross_sales3,'total_profit'=>$total_profit_final3,'expense'=>$sum3];

            }#calculas foreach ends
        }#main foreeach ends
        #advances quarter 1 : 
        #updates on 4 may 2018 : listed advances based on book :
        #now collecting all the advances of the books instead of collecting them added by contributor
        try{
            $db_amount_query = DB::table('assign_contributors')
            ->select('assign_contributors.contributor_id','book_advances.amount','book_advances.year','book_advances.quarter','assign_contributors.book_id','assign_contributors.percentage','book_advances.id as a_id','assign_contributors.id as assign_id') 
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id', '=', 'assign_contributors.book_id');
            })
            ->whereIn('assign_contributors.book_id',$book_ids)
            ->where(function ($query) {
            $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })->get()->toarray(); 
        }catch(\Exception $e){
            return $e->getMessage().' Line no db_amount_q '.$e->getLine();
        }

        #quarter 1 amount/percentage
        $amount_current_quarter = array();
        $amount_current_quarter2 = array();
        $amount_current_quarter3 = array();
        $contributor_percentage = array();
        $amount_current_quarter_test   = array(); 
        foreach($db_amount_query as $item){
            $item = get_object_vars($item);
            #multiplying the percentage by 2
           $contributor_percentage[$item['contributor_id']][$item['book_id']][$item['assign_id']]=$item['percentage'];
            ##for quarter 1
            if($item['quarter']==1 && $item['year'] == $selected_year){
                $amount_current_quarter[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                }
            }
            ##for quarter 2
            if($item['quarter']==2 && $item['year'] == $selected_year){
                $amount_current_quarter2[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset( $amount_current_quarter2[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter2[$item['book_id']][$item['a_id']][]=0;
                }
            }
            ##for quarter 3
            if($item['quarter']==3 && $item['year'] == $selected_year){
                $amount_current_quarter3[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset( $amount_current_quarter3[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter3[$item['book_id']][$item['a_id']]=0;
                }
            }
        }
      
        #royalty due quarter 1
        #royalty due = total profit + total advances added to the book
        $royalty_due = array();
        foreach($book_reports as  $book_report){
            foreach($book_report as $c_id => $book_array){    
                foreach($book_array as $book_sales){
                    $divide_by_val = array_sum($percentage_Array[$book_sales['book_id']]);
                    #checking the royalty choices
                    if($royalty_choice[$book_sales['book_id']] == 1 ||$royalty_choice[$book_sales['book_id']] == NULL ||$royalty_choice[$book_sales['book_id']] == 3){
                        $royalty_due[$c_id][$book_sales['book_id']] =  $book_sales['total_profit'] + array_sum($amount_current_quarter[$book_sales['book_id']]);
                    }
                    if($royalty_choice[$book_sales['book_id']] == 2 ){
                        #(total profit & divide_val /100)-advance
                        $royalty_due[$c_id][$book_sales['book_id']] =   ($book_sales['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter[$book_sales['book_id']]);
                    }
                }
            }
        }

        #balance end of quarter quarter 1
        #contributor's amount = royalty due * contributor's percentage
        #forcontainer #changeprev_1
        $forcontainer1 = array();
        $balance_end_q1 = array();
        foreach($royalty_due as $c_id => $books){ 
            foreach($amount_current_quarter as $books_id => $amount_array){
                foreach($books as $b_id=>$royal_due){
                    if($b_id == $books_id){
                        $full_per = array_sum($percentage_Array[$b_id]);
                        $manage_pay = (array_sum($contributor_percentage[$c_id][$b_id]));
                        if($full_per == 0){
                            $forcontainer1[$c_id][$b_id]= $royal_due * 0;
                            $balance_end_q1[$c_id][$b_id]= $royal_due * 0;
                        }else{
                            $forcontainer1[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per);
                            $balance_end_q1[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per);
                        }
                        $balance_end_q[$c_id][$b_id] = 0;                           
                    }    
                }
            }
        }

        #royalty due quarter 2
        #royalty due = total profit + total advances added to the book
        $royalty_due2 = array();
        foreach($book_reports2 as  $book_report){
            foreach($book_report as $c_id => $book_array){
                foreach($book_array as $book_sales){
                    $divide_by_val = array_sum($percentage_Array[$book_sales['book_id']]);
                    #checking the royalty choices
                    if($royalty_choice[$book_sales['book_id']] == 1 ||$royalty_choice[$book_sales['book_id']] == NULL ||$royalty_choice[$book_sales['book_id']] == 3){
                        $royalty_due2[$c_id][$book_sales['book_id']] =  $book_sales['total_profit'] + array_sum($amount_current_quarter2[$book_sales['book_id']]);
                    }
                    if($royalty_choice[$book_sales['book_id']] == 2 ){
                        #(total profit & divide_val /100)-advance
                        $royalty_due2[$c_id][$book_sales['book_id']] =   ($book_sales['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter2[$book_sales['book_id']]);
                    }
                }
            }
        }
        
        ##balance end of quarter quarter 2
        #contributor's amount = royalty due * contributor's percentage
        #balance end of quarter > royalty due + prev end of quater + advance amount
        $balance_end_q2 = array();
        $beq2 = array();
        foreach($royalty_due2 as $c_id => $books){ 
            foreach($amount_current_quarter2 as $books_id => $amount_array){
                foreach($books as $b_id=>$royal_due){
                    if($b_id == $books_id){
                        #full percentage to the book
                        $full_per = array_sum($percentage_Array[$b_id]);
                        #manage payout to the book
                        $manage_pay = (array_sum($contributor_percentage[$c_id][$b_id]));
                        #adding previous qutr value
                        if($balance_end_q1[$c_id][$b_id]>0){
                            $prev_qty = 0;
                        }else{
                            $prev_qty=$balance_end_q1[$c_id][$b_id];
                        }
                        if($full_per == 0){
                            #values for the container
                            $forcontainer2[$c_id][$b_id]= $royal_due * 0;
                            #final balance   
                            $balance_end_q2[$c_id][$b_id]= $royal_due * 0+$prev_qty;
                        }else{
                            #values for the container
                            $forcontainer2[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per);
                            #final balance   
                            $balance_end_q2[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per)+$prev_qty;
                        }
                    }
                }
            }
        }

        #royalty due quarter 2
        #royalty due = total profit + total advances added to the book
        $royalty_due3 = array();
        foreach($book_reports3 as  $book_report){
            foreach($book_report as $c_id => $book_array){    
                foreach($book_array as $book_sales){
                    $divide_by_val = array_sum($percentage_Array[$book_sales['book_id']]);
                    #checking the royalty choices
                    if($royalty_choice[$book_sales['book_id']] == 1 || $royalty_choice[$book_sales['book_id']] == NULL ||$royalty_choice[$book_sales['book_id']] == 3){
                        $royalty_due3[$c_id][$book_sales['book_id']] = $book_sales['total_profit'] + array_sum($amount_current_quarter3[$book_sales['book_id']]);
                    }
                    if($royalty_choice[$book_sales['book_id']] == 2 ){
                        #(total profit & divide_val /100)-advance
                        $royalty_due3[$c_id][$book_sales['book_id']] =   ($book_sales['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter3[$book_sales['book_id']]);
                    }
                }        
            }
        }
        
        ##balance end of quarter quarter 3
        #contributor's amount = royalty due * contributor's percentage
        #balance end of quarter > royalty due + prev end of quater + advance amount
        $balance_end_q3 = array();
        foreach($royalty_due3 as $c_id => $books){ //book ids and royalty    
            foreach($amount_current_quarter3 as $books_id => $amount_array){
                foreach($books as $b_id=>$royal_due){
                    if($b_id == $books_id){
                        #full percentage to the book
                        $full_per = array_sum($percentage_Array[$b_id]);
                        #manage payout to the book
                        $manage_pay = (array_sum($contributor_percentage[$c_id][$b_id]));
                        #adding previous qutr value
                        if($balance_end_q2[$c_id][$b_id]>0){
                            $prev_qty2 = 0;
                        }else{
                            $prev_qty2=$balance_end_q2[$c_id][$b_id];
                        }
                        if($full_per == 0){
                            #values for the container
                            $forcontainer3[$c_id][$b_id]= $royal_due * 0;
                            #final balance   
                            $balance_end_q3[$c_id][$b_id]= $royal_due * 0 +$prev_qty2;
                        }else{
                            #values for the container
                            $forcontainer3[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per);
                            #final balance
                            $balance_end_q3[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per)+$prev_qty2;
                        }
                    }   
                }
            }   
        }

        #forcontainer
        $final_container1 = array();
        $final_container2 = array();
        $final_container3 = array();
        $final_container = array();
        #sum of the contained items
        $sum_value1 = array();
        $sum_value2 = array();
        $sum_value3 = array();
        foreach($contri_id  as $c_id){
            ##first quarter
            if(isset($container_list[$c_id])){
                foreach($container_list[$c_id] as $main_id => $data){
                    foreach($data as $ids){
                        if(!empty($ids)){
                            $sum_value1[$c_id][$main_id][] = $forcontainer1[$c_id][$ids];
                        }else{
                            $sum_value1[$c_id][$main_id][] =0 ;
                        }
                    }
                }
            }

            foreach($forcontainer1[$c_id] as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(isset($container_list[$c_id])){
                        if(array_key_exists($b_ids, $container_list[$c_id])){
                            #forcollecting the sum of its contained items
                            $sum_bal = 0;
                            foreach($sum_value1[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            }
                            #make the main array
                            if(!empty($container_list[$c_id][$b_ids][0])){
                                if($forcontainer1[$c_id][$b_ids]+$sum_bal < 0 ){
                                    $final_container1[$c_id]['container_collection'][$b_ids]=$forcontainer1[$c_id][$b_ids]+$sum_bal;
                                }else{
                                    $final_container1[$c_id]['container_collection'][$b_ids]=0;
                                }
                                $final_container[$c_id]['container_collection'][$b_ids]=0;
                            }
                        }
                    }
                }
            }

            ##second quarter
            if(isset($container_list[$c_id])){
                foreach($container_list[$c_id] as $main_id => $data){
                    foreach($data as $ids){
                        if(!empty($ids)){
                            $sum_value2[$c_id][$main_id][] = $forcontainer2[$c_id][$ids];
                        }else{
                            $sum_value2[$c_id][$main_id][] =0 ;
                        }
                    }
                }
            }
            
            foreach($forcontainer2[$c_id] as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(isset($container_list[$c_id])){
                        if(array_key_exists($b_ids, $container_list[$c_id])){
                            #forcollecting the sum of its contained items
                            $sum_bal = 0;
                            foreach($sum_value2[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            }
                            #make the main array
                            if(!empty($container_list[$c_id][$b_ids][0])){
                                if($final_container1[$c_id]['container_collection'][$b_ids] < 0 ){
                                    $prev_qty = $final_container1[$c_id]['container_collection'][$b_ids];
                                }else{
                                    $prev_qty = 0;
                                }
                                $final_container2[$c_id]['container_collection'][$b_ids]=$forcontainer2[$c_id][$b_ids]+$sum_bal+$prev_qty;
                            }
                        }
                    }
                }
            }

            #third quarter 
            if(isset($container_list[$c_id])){
                foreach($container_list[$c_id] as $main_id => $data){
                    foreach($data as $ids){
                        if(!empty($ids)){
                            $sum_value3[$c_id][$main_id][] = $forcontainer3[$c_id][$ids];
                        }else{
                            $sum_value3[$c_id][$main_id][] =0 ;
                        }
                    }
                }
            }
            
            foreach($forcontainer3[$c_id] as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(isset($container_list[$c_id])){
                        if(array_key_exists($b_ids, $container_list[$c_id])){
                            #forcollecting the sum of its contained items
                            $sum_bal = 0;
                            foreach($sum_value3[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            }

                            #make the main array
                            if(!empty($container_list[$c_id][$b_ids][0])){
                                if($final_container2[$c_id]['container_collection'][$b_ids] < 0 ){
                                    $prev_qty = $final_container2[$c_id]['container_collection'][$b_ids];
                                }else{
                                    $prev_qty = 0;
                                }
                                $final_container3[$c_id]['container_collection'][$b_ids]=$forcontainer3[$c_id][$b_ids]+$sum_bal+$prev_qty;
                            }
                        }
                    }
                }
            }
        }
        
        #for quarter 5 > Custom quarter
        if($selected_quarter == 5){
            $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
            $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
            if(\Session::get('week_from') == ""){
                $custom_week_from = $default_first_date; 
            }else{
               $custom_week_from = \Session::get('week_from');
            }  
            if(\Session::get('week_to') == ""){
                $custom_week_to = $default_last_date;
            }else{
               $custom_week_to = \Session::get('week_to');
            } 
            $custom_month = date('m', strtotime($custom_week_from));
            $custom_quarter = ceil($custom_month/3);
            if($custom_quarter==1){
                $this->varq = $balance_end_q;
                $this->container_prev = $final_container;
            }
            if($custom_quarter==2){
                $this->varq = $balance_end_q1;
                $this->container_prev = $final_container1;
            }
            if($custom_quarter==3){
                $this->varq = $balance_end_q2;
                $this->container_prev = $final_container2;
            }
            if($custom_quarter==4){
                $this->varq = $balance_end_q3;
                $this->container_prev = $final_container3;
            }
        }else{
            if($selected_quarter==1){
                $this->varq = $balance_end_q;
                $this->container_prev = $final_container;
            }
            if($selected_quarter==2){
                $this->varq = $balance_end_q1;
                $this->container_prev = $final_container1;
            }
            if($selected_quarter==3){
                $this->varq = $balance_end_q2;
                $this->container_prev = $final_container2;
            }
            if($selected_quarter==4){
                $this->varq = $balance_end_q3;
                $this->container_prev = $final_container3;
            }
            if($selected_quarter==5){
                $this->varq = $balance_end_q;
                $this->container_prev = $final_container;
            }
        }
    }

/**
Fucntion used to generate report for Books
Code updated on 05-july-2018 : royalty choice
diamond query updated on 12 July 2018
**/

    public function download_bookreport(Request $request){
        #previous quarter
        $this->download_bookreport_prev_quar($request);
        #current date
        $current = floor((date('n') - 1) / 3);
        #get current quarter
        $q = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        #session : quarter
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #session dates : week from and 
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }  
        #week to
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        }
        #contributor id
        if(isset($_GET['contri_id'])){
            $contri_id = $_GET['contri_id'];
        }
        #logged in user id #dashboard : Added by when redirected from the contributor's dashboard
        if(isset($_GET['added_by'])){ #dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #get books assigned to contributor
        try{
            $book_ids_db = DB::Table('assign_contributors')
            ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage','book_details.out_of_print','book_details.disabled_book')
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            #books join starts
            ->leftJoin('book_details', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            #books join ends
            ->where('assign_contributors.contributor_id',$contri_id)
            ->get()
            ->toArray();
        }catch(\Exception $e){
           return $e->getMessage();
        }

        $book_ids_old = array(); #collects all the book ids
        $op_books = array(); #collects items out of print
        $contributors_ids = array(); #collecting contributor id, percentage
        $disabled_books = array();
        foreach($book_ids_db as $item){
            $item = get_object_vars($item);
            $creator_name = $item['name'];
            #book id
            $book_ids_old[]=$item['book_id']; 
            #percentage
            $contributors_ids1[$item['book_id']]['percentage'][]=$item['percentage'];
            
            $totals_percentage = array_sum($contributors_ids1[$item['book_id']]['percentage']);
            $contributors_ids[$item['book_id']] =  [
                'contri_id'=>$item['contributors_id'],
                'contri_name'=>$item['name'],
                'percentage'=>$totals_percentage,
            ];
            #collect out print books
            if( $item['out_of_print'] == 1){
                $op_books[] = $item['book_id'];
            }
            #disabled_book 
            if($item['disabled_book']==1){
                $disabled_books[]=$item['book_id'];
            }
        }
        $disabled_books = array_unique($disabled_books);
        $book_ids_old = array_unique($book_ids_old);
        ####FILTER FOR THE BOOKS HERE###############

        ##OUT OF PRINT
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }

        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $book_ids = array();
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
           foreach($op_books as $key=> $ids){
                if(isset($out_print_array[$ids])){
                    foreach($out_print_array[$ids] as $things){
                        if($things['year']==$selected_year){
                            $op_q = explode(',',$things['quarters']);
                            if(!in_array($selected_quarter,$op_q)){
                                $not_ids[] = $ids;
                            }
                        }
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $not_ids = array_unique($not_ids);
        $book_ids = array_diff($book_ids_old, $not_ids);
        $book_ids = array_unique(array_values(array_diff($book_ids, $disabled_books)));
        #redirect to empty pdf  if no book is found
        if(empty($book_ids)){
            $cal_error = "No sales found. The books are either disabled or out of print.";
            $load_view =  'pdf/empty_report';
            #returning views
            $pdf = PDF::loadView('pdf/empty_report',compact('creator_name','selected_quarter','selected_year','week_from','week_to','cal_error'));
            return $pdf->stream(); //to view the pdf
            die;
        }

        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
        }

        #digital array
        $digital_info = array(); #digital sales
        $digital_qty = array(); #digital qty

        ##amazon sales
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units') 
            ->leftJoin('amazon_sales_reports', function ($join) {
                $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();     
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['amazon_invoice_date'] >= $week_from && $item['amazon_invoice_date']<=$week_to || empty($item['amazon_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##Apple Sales
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['apple_start_date']<=$week_to && $item['apple_start_date']>=$week_from || empty($item['apple_start_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##barnes and nobles Sales
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }
        
        ##comixology Sales
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);

            if($item['custom_sale_date_comix']<=$week_to && $item['custom_sale_date_comix']>=$week_from || empty($item['custom_sale_date_comix'])){

                $digital_info[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }
        
        ##comixology subscription Sales
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }
        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);

            if($item['custom_date_comix_subs']<=$week_to && $item['custom_date_comix_subs']>=$week_from || empty($item['custom_date_comix_subs'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }  
        }

        ##google Sales
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_google']<=$week_to && $item['custom_sale_date_google']>=$week_from || empty($item['custom_sale_date_google'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##oni press sales
        $oni_qty = array();
        $oni_amount = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
                $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_oni_con']<=$week_to && $item['custom_sale_date_oni_con']>=$week_from || empty($item['custom_sale_date_oni_con'])){
                $oni_amount[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $oni_qty[$item['book_id']]['qty'][]=$item['items_sold'];
            }else{
                $oni_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##oni shopify sales
        $oni_shop_qty = array();
        $oni_shop_amount = array();
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);

            if($item['custom_date']<=$week_to && $item['custom_date']>=$week_from || empty($item['custom_date'])){
                $oni_shop_amount[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $oni_shop_qty[$item['book_id']]['qty'][]=$item['net_quantity'];
            }else{
                $oni_shop_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_shop_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##S & S sales
        $ss_qty = array();
        $ss_amount = array();  
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.dollar_net','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $ss_amount[$item['book_id']]['sales_info'][]=$item['dollar_net']; 
                $ss_qty[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $ss_amount[$item['book_id']]['sales_info'][]=0;  
                $ss_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        #diamond sales
        #breaking into comma sepearted values
        $book_ids1 = implode(',', $book_ids);
        try{
            $contributorss = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_from <= '".$week_to."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$week_to."' and book_financials.week_to >= '".$week_from."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        #expenses
        try{
            $expenses = DB::table('book_details')
                ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
                ->leftJoin('book_expenses', function ($join) {
                    $join->on('book_details.id', '=', 'book_expenses.book_id');
                })
                ->whereIn('book_details.id',$book_ids)
                ->get();
        }catch(\Exception $e){
           return $e->getMessage()." Line no assigned_books_arr ".$e->getLine();
        }
        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            $expense[$item['id']][] = ['book_id'=>$item['id'],
                            'book_title'=> $item['book_title'],
                            'first_quarter'=> $item['first_quarter'],
                            'second_quarter'=>  $item['second_quarter'],
                            'third_quarter'=> $item['third_quarter'],
                            'fourth_quarter'=> $item['fourth_quarter'],
                            'year'=>  $item['year']
                            ];        
        }

        #main array
        if(!empty($book_ids)){
            foreach ($contributorss as $item) {
                $item = get_object_vars($item);
                #user_info
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['id']= $contributors_ids[$item['id']]['contri_id'];
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['name']= $contributors_ids[$item['id']]['contri_name'];
                ##DIRECT 
                #DIRECT_MARKET_STORES
                if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                    if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_direct[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty retail
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_disc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_MARKET_STORES']= [
                                'store'=>$item['market'],
                                'qty_sold' => $val_totals_q,
                                'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                                'total_cost' => $total_cost_direct[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                                'discount'=>$total_cost_stores_disc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                                'unit_retail1'=>0,

                            ];
                    }
                }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_MARKET_STORES'] )){
                    #send main array empty is no sales found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_MARKET_STORES']= 
                    [
                        'store'=>'DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0

                    ];
                }
                #DIRECT_SHORTAGE_/_DAMAGE
                if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                    if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_shortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                            [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_shortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]

                            ];
                    }
                }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_SHORTAGE_/_DAMAGE'] )){
                    #send main array empty is no sale found
                     $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_SHORTAGE_/_DAMAGE']=
                            [
                            'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                            'qty_sold' => 0,
                            'unit_retails' => 0,
                            'total_cost' => 0,
                            'total_cost1.1'=>0,
                            'discount'=>0
                            ];
                }
                ##NON DIRECT
                #NON-DIRECT_MARKET_STORES
                if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                    if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total_cost
                        $total_cost_nondirect[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_MARKET_STORES']= [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_nondirect[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                            ];
                    }
                }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_MARKET_STORES'] )){
                    #send main array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_MARKET_STORES']= 
                            [
                                'store'=>'NON-DIRECT_MARKET_STORES',
                                'qty_sold' => 0,
                                'unit_retails' => 0,
                                'total_cost' => 0,
                                'total_cost1.1'=>0,
                                'discount'=>0
                            ];
                }
                #NON-DIRECT_SHORTAGE
                if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                    if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_nonshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_SHORTAGE']= 
                            [
                                'store'=>$item['market'],
                                'qty_sold' => $val_totals_q,
                                'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                                'total_cost' => $total_cost_nonshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                                'total_cost1'=>0,
                                'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                            ];
                    }
                }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_SHORTAGE'] )){
                    #send main array empty is no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_SHORTAGE']= 
                        [
                            'store'=>'NON-DIRECT_SHORTAGE',
                            'qty_sold' => 0,
                            'unit_retails' => 0,
                            'total_cost' => 0,
                            'total_cost1.1'=>0,
                            'discount'=>0

                        ];
                }
                ##INTERNATIONAL
                #INTERNATIONAL_NON-DIRECT_MARKET_STORES
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit_retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_interdirect[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                            [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_interdirect[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                            ];
                    }     
                }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1'=>0,
                        'discount'=>0
                        ];
                }
                #INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                        #total qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_internon[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                            [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_internon[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]

                            ];
                    }     
                }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $contributors1[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                            [
                            'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                            'qty_sold' => 0,
                            'unit_retails' => 0,
                            'total_cost' => 0,
                            'total_cost1'=>0,
                            'discount'=>0
                            ];
                }
                ##RETURNS
                #DIRECT_RETURNS
                if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'DIRECT_RETURNS'){
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_dirctreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_RETURNS']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_dirctreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount' => $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        ];
                    }
                }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_RETURNS'] )){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['DIRECT_RETURNS']= 
                            [
                            'store'=>'DIRECT_RETURNS',
                            'qty_sold' => 0,
                            'unit_retails' =>0,
                            'total_cost' =>0,
                            'total_cost1.1'=>0,
                            'discount' =>0,
                            ];
                }
                #NON-DIRECT_RETURNS
                if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                        #qty sold
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit_retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_nonreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_RETURNS']= 
                            [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_nonreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount' => $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],

                            ];
                    }  
                }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_RETURNS'] )){
                    #send main array empty if no sale is found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['NON-DIRECT_RETURNS']= 
                        [
                        'store'=>'NON-DIRECT_RETURNS',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost12'=>0,
                        'discount' => 0,
                        ];
                }
                #digital sales
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['digital_sales']=array_sum($digital_info[$item['id']]['sales_info']);
                #digital qty
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['digital_qty']=array_sum($digital_qty[$item['id']]['qty']);
                #oni sales
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['oni_sales']=(array_sum($oni_amount[$item['id']]['sales_info']) *.90)+(array_sum($oni_shop_amount[$item['id']]['sales_info']) *.90);
                #oni qty
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['oni_qty']=array_sum($oni_qty[$item['id']]['qty'])+array_sum($oni_shop_qty[$item['id']]['qty']);
                #ss sales
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['ss_sales']=array_sum($ss_amount[$item['id']]['sales_info']);
                #ss qty
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['ss_qty']=array_sum($ss_qty[$item['id']]['qty']);
                #expenses
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['expense'] = $expense;
                #user info
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['book_count'] =  count($contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']);
                #percentage
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['percentage'][$item['id']] = 
                    array(
                    'percentage'=> $contributors_ids[$item['id']]['percentage']
                    );
                #percentage total for one book
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['percentage_Array'][$item['id']]= array_sum($percentage_Array[$item['id']]);
                #count of contributors to this book
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['contri_count'][$item['id']]= count($percentage_Array[$item['id']]);
                #type of royalty choice
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['royalty_choice'][$item['id']]= $item['book_choice'];
                 #print_price for royalty choice == cover price
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['print_price'][$item['id']]= $item['print_price'];
            }#main array foreach ends
        }
        
        #for out of print values #get the books out of print data
        try{
            $out_of_print_details = DB::table('book_details')->select('id','out_of_print','print_date')->whereIn('id',$book_ids)->get();    
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #collect if there is any out of print lying in the weekfrom and weekto date and collect them in array
        $out_print = array();
        foreach($out_of_print_details as $item){
            $item = get_object_vars($item);
            $print_date = date("Y-m-d", strtotime($item['print_date']));
            if($item['out_of_print']==1){    
                $out_print[] = ['id'=>$item['id'],'out_of_print'=>$item['out_of_print'],'print_date'=>$item['print_date']];
            }
        }

        #collect selected quarter advance : all advances added to the book in the selected qtr
        try{
            $advance = DB::table('book_details')
            ->select('book_details.id as book_id','book_advances.id','book_advances.book_id as db_id','book_details.book_title','book_advances.added_by','book_advances.amount','book_advances.year','book_advances.quarter','book_advances.updated_at')
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id','=','book_details.id');
            })
            ->wherein('book_details.id',$book_ids)
            ->where('book_details.added_by',$id)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        
        #advance current qtr : collecting advances based on the qtr selected
        $amount_current_quarter = array();
        foreach($advance as $item){
            $item = get_object_vars($item);
            #if not a custom array, filter it based on the year and quarter
            if($selected_quarter != 5 ){
                if($item['quarter']==$selected_quarter && $item['year'] == $selected_year){
                    $amount_current_quarter[$item['book_id']][] =$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']])){
                        $amount_current_quarter[$item['book_id']][]=0;
                    }
                }
            }else{
                #custom quarter dates
                $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
                $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
                if(\Session::get('week_from') == ""){
                    $custom_week_from = $default_first_date; 
                }else{
                   $custom_week_from = \Session::get('week_from');
                }  
                if(\Session::get('week_to') == ""){
                    $custom_week_to = $default_last_date;
                }else{
                   $custom_week_to = \Session::get('week_to');
                } 
                $custom_quarter_from = ceil(date('m', strtotime($custom_week_from))/3);
                $custom_quarter_to = ceil(date('m', strtotime($custom_week_to))/3);
                #custom quarter amount
                if($item['year'] == $selected_year && ( $item['quarter'] >= $custom_quarter_from && $item['quarter'] <= $custom_quarter_to )){
                    $amount_current_quarter[$item['book_id']][] =$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']])){
                        $amount_current_quarter[$item['book_id']][]=0;
                    }
                }
            }
        }

        #prev qrt balance end of qtr
        $balance_end_q_prev = $this->varq[$contri_id];
        #returning views
        $pdf = PDF::loadView('pdf/book_report',compact('contributors1','selected_quarter', 'selected_year','week_from','week_to','out_print','amount_current_quarter','balance_end_q_prev'));
        return $pdf->stream(); //to view the pdf
        die();
        return $pdf->download('contributor-report.pdf'); //to automatically delete it
    }   /* end download_bookreport action*/

/**
to generate report for royality
diamond query updated on 12 July 2018
**/

    public function download_royaltyreport(Request $request){
        #global variable
        $this->download_bookreport_prev_quar($request);
        $id = Auth::user()->id; //current user who is logged in
        $current = floor((date('n') - 1) / 3); //getting current date quarter
        $year = date('y');//current year
        $quarters = array();
        $q = "";
        $mysql_qty = "";
        for ($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        $mysql_qty = $q;//quarter used for mysql query
        #session values
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        $mysql_qty = $selected_quarter;
        #year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; //current year
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #week from
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }  
        #week to
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        }
        #list of contributors
        try{
            $contributors_raw = DB::raw('(select users.id,users.name, users.email, users.country, users.state, users.city ,users.merged_contributor,users.added_by,users.login_type,contributionsdata.contributions from  (select distinct assign_contributors.contributor_id, count(distinct book_details.id) as contributions from assign_contributors LEFT JOIN book_details ON book_details.id = assign_contributors.book_id where book_details.merged_book  <> 1 group by contributor_id ) as contributionsdata left join users on contributionsdata.contributor_id = users.id where login_type = 2) as contridet');
                $all_contributors = DB::table('contridet')
                ->select('contridet.id')
                ->from($contributors_raw)
                ->leftJoin('country', function ($join) {
                    $join->on('contridet.country', '=', 'country.id');
                })
                ->leftJoin('state', function ($join) {
                    $join->on('contridet.state', '=', 'state.id');
                })
                ->leftJoin('city', function ($join) {
                    $join->on('contridet.city', '=', 'city.id');
                })
                ->where(function ($query) {
                    $query->where('contridet.merged_contributor','!=',1)
                    ->orWhereNull('contridet.merged_contributor');
                })
                ->where('added_by',$id)
                ->where('login_type', 2)
                ->Get();
        }catch(\Exception $e){ 
            return $e.getMessage(); 
        }
        $contri_id = array(); 
        foreach($all_contributors as $contributors){
            $contributors = get_object_vars($contributors);
            $contri_id[] = $contributors['id'];
            
        }
        #get books assigned to contributor
        try{
            $book_ids_db = DB::Table('assign_contributors')
            ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage','book_details.out_of_print','book_details.disabled_book')
            ->leftJoin('users', function ($join) {
            $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->leftJoin('book_details', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->wherein('assign_contributors.contributor_id',$contri_id)
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->distinct('assign_contributors.book_id')
            ->get() ->toArray();
        }catch(\Exception $e){
           return $e->getMessage();
        }
        $book_ids_old = array();
        $contributors_ids = array();
        $op_books = array(); #collects items out of print
        #contributor_based book ids for containers
        $container_b_id = array();
        $disabled_books = array();
        foreach($book_ids_db as $item){
            $item = get_object_vars($item);
            $book_ids_old[]=$item['book_id'];
            #collect percentage
            $contributors_ids1[$item['contributors_id']][$item['book_id']]['percentage'][]=$item['percentage'];
            $totals_percentage = array_sum($contributors_ids1[$item['contributors_id']][$item['book_id']]['percentage']);
            #adding percentage in the array
            $contributors_ids[$item['contributors_id']][$item['book_id']]=  [
            'contri_id'=>$item['contributors_id'],
            'contri_name'=>$item['name'],
            'percentage'=>$totals_percentage,
            ];
            $container_b_id[$item['contributors_id']][]=$item['book_id'];
            #collect out print books
            if( $item['out_of_print'] == 1){
                $op_books[] = $item['book_id'];
            }
            #disabled books
            if($item['disabled_book'] == 1){
                $disabled_books[]=$item['book_id'];
            }
        }
        $disabled_books = array_unique($disabled_books);
        $book_ids_old = array_unique($book_ids_old);
        $op_books = array_unique($op_books);
        ####FILTER FOR THE BOOKS HERE###############
        ##OUT OF PRINT
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }
        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $book_ids = array();
        #where ids should be from these
        $not_ids = array();
        if(!empty($op_books)){
           foreach($op_books as $key=> $ids){
                if(isset($out_print_array[$ids])){
                    foreach($out_print_array[$ids] as $things){
                        if($things['year']==$selected_year){
                            $op_q = explode(',',$things['quarters']);
                            if(!in_array($selected_quarter,$op_q)){
                                $not_ids[] = $ids;
                            }
                        }
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $book_ids = array_diff($book_ids_old, $not_ids);
        $book_ids = array_unique(array_values(array_diff($book_ids, $disabled_books)));
        
        #redirect if no book is found
        if(empty($book_ids)){
            $myerror = 'Contributor has no book assigned';
            return redirect('reports')->with(compact('myerrorr', 'myerror'));
        }
        
        #container items 
        try{
            $get_containted = DB::table('book_vol_containers')
            ->select('book_vol_containers.book_main_id','book_vol_containers.contained_book_id',
                'book_main.contributor_id as main_contri','book_sub.contributor_id as sub_contri')
            ->wherein('book_vol_containers.book_main_id',$book_ids)
            #where not in starts
            ->whereNotIn('book_vol_containers.book_main_id',$not_ids)
            ->whereNotIn('book_vol_containers.contained_book_id',$not_ids)
            ->whereNotIn('book_main.book_id',$not_ids)
            #where not in ends
            #where not in disabled starts
            ->whereNotIn('book_vol_containers.book_main_id',$disabled_books)
            ->whereNotIn('book_vol_containers.contained_book_id',$disabled_books)
            ->whereNotIn('book_main.book_id',$disabled_books)
            #where not in disabled ends
            ->leftJoin('assign_contributors as book_main', function ($join) {
                $join->on('book_vol_containers.book_main_id', '=', 'book_main.book_id');
            })
            ->leftJoin('assign_contributors as book_sub', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'book_sub.book_id');
            })->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $unsorted_container_list = array();
        foreach($get_containted as $item){
            $item = get_object_vars($item);
            if(isset($container_b_id[$item['main_contri']])){
                if(in_array($item['book_main_id'],$container_b_id[$item['main_contri']]) && in_array($item['contained_book_id'],$container_b_id[$item['main_contri']])){
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = $item['contained_book_id'];
                }else{
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = '';
                }
            }
        }
        #sort out the array
        $container_list = array();
        foreach($unsorted_container_list as $c_id => $b_ids){
            foreach ($b_ids as $main => $ids) {
               rsort($ids);
               $container_list[$c_id][$main]=array_values(array_unique($ids));
            }
        }
        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $print_pr = array();
        $royalty_choice = array();
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice'];
            $print_pr[$item['id']] = $item['print_price'];
        }
        ##quarter in words 
        if($selected_quarter == 1){
            $selected_quarter_words ='first_quarter';
        }
        if($selected_quarter == 2){
            $selected_quarter_words = 'second_quarter';
        }
        if($selected_quarter == 3){
            $selected_quarter_words = 'third_quarter';
        }
        if($selected_quarter == 4){
            $selected_quarter_words ='fourth_quarter';
        }
        if($selected_quarter == 5){
            $selected_quarter_words = 'custom_quarter';
        }
        $markeyvalueslist = array(); //main array containing the market and sales details
        $contributors1 = array();
        $testcontri = array();
        $total_cost_array = array(); //collect the total cost
        $title = ""; //title of the boook
        $this_quarter = ""; //name of the quarter
        $main_quarter = array(); //collecting name and quarter expense
        $quarter_value = array(); //book id
        $total_profit = array();
        $gross_sales = array();
        $contributorslist = array();
        $total_array = array();
        $array_sub = array();
        $digital_info = array(); //digital data
        $digital_qty = array(); #digital qty
        #for custom quarter
        $qtrs_val=array();
        if($selected_quarter == 5){
            $selected_q = 'Custom Quarter (Jan - Dec)'; 
            $month1 = date('m', strtotime($week_from));//get the quarter of week from date
            $q1 = ceil($month1/3);
            $month2 = date('m', strtotime($week_to));//get the quarter of week to date
            $q2 = ceil($month2/3);  
            for($qtrs=$q1; $qtrs <= $q2; $qtrs++){//collect the quarter in array
                $qtrs_val[]=$qtrs;
            }
        }

        ##digital sales : 
        ##amazon
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units')
            ->leftJoin('amazon_sales_reports', function ($join) {
            $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['amazon_invoice_date'] >= $week_from && $item['amazon_invoice_date']<=$week_to || empty($item['amazon_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['amazon_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['net_units'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0;
            }
        }
        
        ##Apple
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['apple_start_date']<=$week_to && $item['apple_start_date']>=$week_from || empty($item['apple_start_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }        
        }

        ##barnes and nobles
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0;  
            }             
        }

        ##comixology
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_comix']<=$week_to && $item['custom_sale_date_comix']>=$week_from || empty($item['custom_sale_date_comix'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }           
        }

        ##comixology subscription
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }
        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date_comix_subs']<=$week_to && $item['custom_date_comix_subs']>=$week_from || empty($item['custom_date_comix_subs'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##google
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_google']<=$week_to && $item['custom_sale_date_google']>=$week_from || empty($item['custom_sale_date_google'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##oni press sales
        $oni_amount = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_oni_con']<=$week_to && $item['custom_sale_date_oni_con']>=$week_from || empty($item['custom_sale_date_oni_con'])){
                $oni_amount[$item['book_id']]['sales_info'][]=$item['net_sales'];
                $digital_qty[$item['book_id']]['qty'][]=$item['items_sold'];   
            }else{
                $oni_amount[$item['book_id']]['sales_info'][]=0;
                $digital_qty[$item['book_id']]['qty'][]=0;   
            }           
        }

        ##oni Shopify sales
        $oni_shop_amount = array();
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date']<=$week_to && $item['custom_date']>=$week_from || empty($item['custom_date'])){
                $oni_shop_amount[$item['book_id']]['sales_info'][]=$item['total_sales'];
                $digital_qty[$item['book_id']]['qty'][]=$item['net_quantity'];   
            }else{
                $oni_shop_amount[$item['book_id']]['sales_info'][]=0;
                $digital_qty[$item['book_id']]['qty'][]=0;   
            }           
        }

        ##S & S
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.dollar_net','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty[$item['book_id']]['qty'][]=$item['unit_net'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }           
        }
        
        ##diamond sales
        $contri_id1 = implode(',', $contri_id);
        $book_ids1 = implode(',', $book_ids);
        try{
            $markeyvalues_main = DB::select("select DISTINCT book_details.id, assign_contributors.contributor_id,users.name,users.merged_contributor, book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_from <= '".$week_to."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$week_to."' and book_financials.week_to >= '".$week_from."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id  left join assign_contributors on assign_contributors.book_id = book_details.id left join users on users.id = assign_contributors.contributor_id where assign_contributors.contributor_id IN (".$contri_id1.") and book_details.added_by = ".$id." and book_details.id IN (".$book_ids1.")  and (book_details.merged_book != 1 OR book_details.merged_book IS NULL) and (users.merged_contributor != 1 OR users.merged_contributor IS NULL)  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        #Expense
        try{
            $expenses = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
            ->leftJoin('book_expenses', function ($join) {
                $join->on('book_details.id', '=', 'book_expenses.book_id');
            })
            ->whereIn('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage()." Line no expenses_ids ".$e->getLine();
        }
        
        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            #if not custom quarter
            if($selected_quarter != 5){
                if(in_array($item['id'], $book_ids)){
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $expense[$item['id']] = $item[$selected_quarter_words];    
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                          $expense[$item['id']] = 0;
                        }
                    }
                }else{
                    $expense[$item['id']]=0;
                }
                #if custom quarter sum up all the values
            }else{
                if(in_array($item['id'], $book_ids)){ 
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $all_qtr_sum =0;
                        foreach($qtrs_val as $qtr){  
                            if($qtr == 1){
                                $all_qtr_sum +=$item['first_quarter'];
                            }
                            if($qtr == 2){
                                $all_qtr_sum +=$item['second_quarter'];
                            }
                            if($qtr == 3){
                                $all_qtr_sum +=$item['third_quarter'];
                            }
                            if($qtr == 4){
                                $all_qtr_sum +=$item['fourth_quarter'];
                            }
                        }
                        $expense[$item['id']] =$all_qtr_sum;
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                          $expense[$item['id']]=0;  
                        }
                    }
                }else{
                    $expense[$item['id']] = 0;
                }
            }#ends condition for quarter
        }#ends expense foreach
        
        #creation on diamond array
        if(!empty($book_ids)){
            foreach ($markeyvalues_main as $item) {
                $item = get_object_vars($item);
                $contributors1[$item['contributor_id']]['user_details']['contributor_id']= $item['contributor_id'];
                $contributors1[$item['contributor_id']]['user_details']['name']= $item['name'];
                #direct                
                if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'DIRECT_MARKET_STORES' ){
                        $qq_DMS[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_DMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_DMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_DMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => array_sum($qq_DMS[$item['contributor_id']][$item['id']][$item['market']]),
                        'unit_retails' =>$u_r_DMS[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost' =>$t_c_DMS[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost3' => 0,
                        'id'=>$item['id'],
                        'discount'=>$d_p_DMS[$item['contributor_id']][$item['id']][$item['market']],
                        ];
                    }
                }if(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_MARKET_STORES']) ){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_MARKET_STORES']= 
                    [
                        'store'=>'DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']
                    ];
                }
               if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                    if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                        $qq_DSD[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_DSD[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_DSD[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_DSD[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => array_sum($qq_DSD[$item['contributor_id']][$item['id']][$item['market']]),
                        'unit_retails' =>$u_r_DSD[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost' =>$t_c_DSD[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost3' => 0,
                        'book_id'=>$item['id'],
                        'discount'=>$d_p_DSD[$item['contributor_id']][$item['id']][$item['market']],   
                        ];
                    } 
                }if(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_SHORTAGE_/_DAMAGE']) ){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                        'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']

                    ];
                }
                #non direct
                if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                    if(trim($item['market']) === 'NON-DIRECT_MARKET_STORES'){
                        $qq_NDMS[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_NDMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_NDMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_NDMS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                            'store'=>$item['market'],
                            'qty_sold' => array_sum($qq_NDMS[$item['contributor_id']][$item['id']][$item['market']]),
                            'unit_retails' =>$u_r_NDMS[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost' =>$t_c_NDMS[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost3' => 0,
                            'book_id'=>$item['id'],
                            'discount'=>$d_p_NDMS[$item['contributor_id']][$item['id']][$item['market']],   
                        ];
                    }
                }if(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_MARKET_STORES'])){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>'NON-DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']
                        ];
                }
                if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                    if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                        $qq_NDS[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_NDS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_NDS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_NDS[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => array_sum($qq_NDS[$item['contributor_id']][$item['id']][$item['market']]),
                        'unit_retails' =>$u_r_NDS[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost' =>$t_c_NDS[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost3' => 0,
                        'book_id'=>$item['id'],
                        'discount'=>$d_p_NDS[$item['contributor_id']][$item['id']][$item['market']],
                        ];
                    }
                }if(empty(array_search('NON-DIRECT_SHORTAGE',$item, true))  && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_SHORTAGE']) ){ 
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_SHORTAGE']= 
                        [
                        'store'=>'NON-DIRECT_SHORTAGE',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']
                        ];
                }
                #international 
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                        $qq_inter[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $tt_inter[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $tc_inter[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_inter[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => array_sum($qq_inter[$item['contributor_id']][$item['id']][$item['market']]),
                        'unit_retails' =>$tt_inter[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost' =>$tc_inter[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost3' => 0,
                        'book_id'=>$item['id'],
                        'discount'=>$d_p_inter[$item['contributor_id']][$item['id']][$item['market']],     
                        ];
                    }
                }if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'])){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                        ['store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']
                        ];
                }
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                        $qq_inter2[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_inter2[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_inter2[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_inter2[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => array_sum($qq_inter2[$item['contributor_id']][$item['id']][$item['market']]),
                        'unit_retails' =>$u_r_inter2[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost' =>$t_c_inter2[$item['contributor_id']][$item['id']][$item['market']],
                        'total_cost3' => 0,
                        'id'=>$item['id'],
                        'discount'=>$d_p_inter2[$item['contributor_id']][$item['id']][$item['market']],   
                        ];
                    }
                }if(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'])){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1'=>0,
                        'discount'=>0,
                        'book_id'=>$item['id']
                        ];
                }

                #returns
                if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'DIRECT_RETURNS'){
                        $qq_dr[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_dr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_dr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_dr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                            'store'=>$item['market'],
                            'qty_sold' => array_sum($qq_dr[$item['contributor_id']][$item['id']][$item['market']]),
                            'unit_retails' =>$u_r_dr[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost' =>$t_c_dr[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost3' => 0,
                            'id'=>$item['id'],
                            'discount'=>$d_p_dr[$item['contributor_id']][$item['id']][$item['market']],
                        ];
                    }
                }if(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_RETURNS']) ){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['DIRECT_RETURNS']= 
                        [
                            'store'=>'DIRECT_RETURNS',
                            'qty_sold' => 0,
                            'unit_retails' =>0,
                            'total_cost' =>0,
                            'total_cost1.1'=>0,
                            'discount' =>0,
                            'book_id'=>$item['id']
                        ];
                }
                if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                        $qq_ndr[$item['contributor_id']][$item['id']][$item['market']][] = trim($item['qty_sold']);
                        $u_r_ndr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['unit_retails']);
                        $t_c_ndr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['total_cost']);
                        $d_p_ndr[$item['contributor_id']][$item['id']][$item['market']] = trim($item['desc_percentage']);
                        $contributors1[$item['contributor_id']]['calculas'][$item['id']][$item['market']]= 
                        [
                           'store'=>$item['market'],
                            'qty_sold' => array_sum($qq_ndr[$item['contributor_id']][$item['id']][$item['market']]),
                            'unit_retails' =>$u_r_ndr[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost' =>$t_c_ndr[$item['contributor_id']][$item['id']][$item['market']],
                            'total_cost3' => 0,
                            'id'=>$item['id'],
                            'discount'=>$d_p_ndr[$item['contributor_id']][$item['id']][$item['market']],  
                        ];
                    } 
                }if(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset($contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_RETURNS']) ){
                    $contributors1[$item['contributor_id']]['calculas'][$item['id']]['NON-DIRECT_RETURNS']= 
                        [
                        'store'=>'NON-DIRECT_RETURNS',
                        'qty_sold' => 0,
                        'unit_retails' =>0,
                        'total_cost' =>0,
                        'total_cost1.1'=>0,
                        'discount' =>0,
                        'book_id'=>$item['id']
                        ]; 
                }
            }#ends array1 foreach
        }#ends condition
        
        #expense > total profit
        foreach($contributors1 as $c_id => $contributordet){
            $gross_sales = 0;
            $total_qty = 0;
            foreach($contributordet['calculas'] as $book_no1=>$calc){
                #direct 
                $net_direct_revenue =  ($calc['DIRECT_MARKET_STORES']['total_cost'])+( $calc['DIRECT_SHORTAGE_/_DAMAGE']['total_cost'])+( $calc['DIRECT_RETURNS']['total_cost']);
                #non direct
                $net_non_dir_revenue = ($calc['NON-DIRECT_MARKET_STORES']['total_cost'])+($calc['NON-DIRECT_SHORTAGE']['total_cost']);
                #returns
                $return_revenue =  $calc['NON-DIRECT_RETURNS']['unit_retails'] * $calc['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
                $net_revenue = $calc['NON-DIRECT_RETURNS']['unit_retails']*(1-($calc['NON-DIRECT_RETURNS']['discount']/100)) * $calc['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
                #international
                $net_internatioal_revenue = $calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
                #totals
                $gross_sales = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info[$book_no1]['sales_info'])+(array_sum($oni_amount[$book_no1]['sales_info'])*.90)+(array_sum($oni_shop_amount[$book_no1]['sales_info'])*.90);
                #Qty 
                $total_qty = $calc['DIRECT_MARKET_STORES']['qty_sold']+$calc['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$calc['NON-DIRECT_SHORTAGE']['qty_sold']+$calc['NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['NON-DIRECT_RETURNS']['qty_sold']+$calc['DIRECT_RETURNS']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty[$book_no1]['qty']);
                #expense
                $sum = $expense[$book_no1];
                ##checking the royalty choice 
                #if choice is 1 i.e. net
                if($royalty_choice[$book_no1] == 1||$royalty_choice[$book_no1] == NULL ){
                    #profit
                    $total_profit = $gross_sales-$sum;
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final1 = $total_profit *$divide_by_val/100;
                }
                #if choice is 2 i.e. gross
                if($royalty_choice[$book_no1] == 2){
                    #profit
                    $total_profit = $gross_sales;
                    $total_profit_final1 = $total_profit;
                } 
                #if choice is 2 i.e. Cover price
                if($royalty_choice[$book_no1] == 3 ){
                    #profit
                    $total_profit = $gross_sales;
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final1 = $print_pr[$book_no1] * $total_qty *$divide_by_val/100 ;
                } 
                #profit & sales : calculate 50% of the total profit to collect the contributor's share
                $book_reports['book_report'][$contributordet["user_details"]["contributor_id"]][]= array('book_id'=>$book_no1,'gross_sales'=>$gross_sales,'total_profit'=>$total_profit_final1);
            }#calculas foreach ends
        } #main foreach ends
        
        #advances
        try{
            $db_amount_query = DB::table('assign_contributors')
            ->select('assign_contributors.contributor_id','book_advances.amount','book_advances.year','book_advances.quarter','assign_contributors.book_id','assign_contributors.percentage','users.name','users.merged_contributor','book_advances.id as a_id','assign_contributors.id as assign_id') 
            ->leftJoin('book_advances', function ($join) {
                 $join->on('book_advances.book_id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->whereIn('assign_contributors.book_id',$book_ids)
            ->where(function ($query) {
            $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })->get()->toarray(); 
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #percentage and current quarter advance
       
        $amount_current_quarter = array();
        $contributor_percentage = array();
        $contri_name = array();
        foreach($db_amount_query as $item){
            $item = get_object_vars($item);
            #doubling the percentage #changes
            $contributor_percentage[$item['contributor_id']][$item['book_id']][$item['assign_id']]=$item['percentage'];
            $contri_name[$item['contributor_id']] = $item['name'];
            if($selected_quarter != 5){
              if($item['quarter']==$selected_quarter && $item['year'] == $selected_year){
                    $amount_current_quarter[$item['book_id']][$item['a_id']] =$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }  
            }else{
                #custom quarter dates
                $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
                $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
                if(\Session::get('week_from') == ""){
                    $custom_week_from = $default_first_date; 
                }else{
                   $custom_week_from = \Session::get('week_from');
                }  
                if(\Session::get('week_to') == ""){
                    $custom_week_to = $default_last_date;
                }else{
                   $custom_week_to = \Session::get('week_to');
                } 
                $custom_quarter_from = ceil(date('m', strtotime($custom_week_from))/3);
                $custom_quarter_to = ceil(date('m', strtotime($custom_week_to))/3);
                #custom quarter amount
                if($item['year'] == $selected_year && ( $item['quarter'] >= $custom_quarter_from && $item['quarter'] <= $custom_quarter_to )){
                    $amount_current_quarter[$item['book_id']][$item['a_id']] = $item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }
        }
        $balance_end_q_prev = $this->varq;

        #royalty due
        $royalty_due = array();
        foreach($book_reports as  $book_report){
            foreach($book_report as $c_id => $book_array){    
                foreach($book_array as $book_sales){
                    $divide_by_val= (array_sum($percentage_Array[$book_sales['book_id']]))/100;
                    #checking the royalty choices
                    if($royalty_choice[$book_sales['book_id']] == 1 ||$royalty_choice[$book_sales['book_id']] == NULL || $royalty_choice[$book_sales['book_id']] == 3){
                        $royalty_due[$c_id][$book_sales['book_id']] =  $book_sales['total_profit'] + array_sum($amount_current_quarter[$book_sales['book_id']]);
                    }
                    if($royalty_choice[$book_sales['book_id']] == 2 ){
                        #(total profit & divide_val /100)-advance
                        $royalty_due[$c_id][$book_sales['book_id']] =   ($book_sales['total_profit']*$divide_by_val) + array_sum($amount_current_quarter[$book_sales['book_id']]);
                    }
                }
            }
        }

        #balance end of quarter and other calculations 
        $forcontainer = array();
        $balance_end_q2 = array();
        $beq2 = array();
        foreach($royalty_due as $c_id => $books){ //book ids and royalty
            foreach($amount_current_quarter as $book_id => $amount_values){
                foreach($books as $b_id=>$royal_due){
                    if($b_id == $book_id){
                        $full_per =  array_sum($percentage_Array[$b_id]);
                        $manage_pay = array_sum($contributor_percentage[$c_id][$b_id]);
                        if($balance_end_q_prev[$c_id][$b_id]>0){
                            $prev_qty = 0;
                        }else{
                            $prev_qty=$balance_end_q_prev[$c_id][$b_id];
                        }
                        if($full_per==0){
                            $forcontainer[$c_id][$b_id]= $royal_due * 0;
                            $beq2[$c_id][$b_id]= $royal_due * 0+$prev_qty;
                        }else{
                            $forcontainer[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per);                        
                            $beq2[$c_id][$b_id]= $royal_due * ($manage_pay/$full_per)+$prev_qty;
                        }
                    }
                }
            }
        }
            
        #previous container data
        $bal_prev_container = $this->container_prev;
        
        $sum_value1 = array();
        $final_container = array();
        foreach($contri_id  as $c_id){
            ##first quarter
            if(isset($container_list[$c_id])){
                foreach($container_list[$c_id] as $main_id => $data){
                    foreach($data as $ids){
                        if(!empty($ids)){
                            $sum_value1[$c_id][$main_id][] = $forcontainer[$c_id][$ids];
                        }else{
                            $sum_value1[$c_id][$main_id][] =0 ;
                        }
                    }
                }
                #books with container and simple items
                foreach($container_list[$c_id] as $main => $b_ids){
                    if(empty($container_list[$c_id][$main][0])){
                        #issue pending
                        $final_container[$c_id][$main]=$beq2[$c_id];
                    }else{
                        unset($beq2[$c_id][$main]);
                        foreach ($b_ids as $key => $ids) {
                        unset($beq2[$c_id][$ids]);
                        }
                    }
                }
                #for mixed books : container/ contained/simple
                $hybrid = array();
                foreach($beq2[$c_id] as $b_ids=> $sum){
                    if($sum < 0){
                        $hybrid[$c_id][$b_ids] = 0;
                    }else{
                        $hybrid[$c_id][$b_ids] = $beq2[$c_id][$b_ids];
                    }
                }
                if(!empty($hybrid)){
                    $final_container[$c_id]= $hybrid[$c_id];
                }
            }else{
                #for simple books
                $simple_book = array();
                if(isset($beq2[$c_id])){
                    foreach($beq2[$c_id] as $b_ids=> $sum){ #here
                         if($sum < 0){
                            $simple_book[$c_id][$b_ids] = 0;
                        }else{
                            $simple_book[$c_id][$b_ids] = $beq2[$c_id][$b_ids];
                        }
                    }
                    $final_container[$c_id]= $simple_book[$c_id];
                }
            }

            if(isset($forcontainer[$c_id])){
                foreach($forcontainer[$c_id] as $b_ids => $values){
                    if(!empty($container_list)){
                        #check if there is a container
                        if(isset($container_list[$c_id])){
                            if(array_key_exists($b_ids, $container_list[$c_id])){
                                #forcollecting the sum of its contained items
                                $sum_bal = 0;
                                foreach($sum_value1[$c_id][$b_ids] as $values){
                                    $sum_bal += $values;
                                }
                                #make the main array
                                if(!empty($container_list[$c_id][$b_ids][0])){
                                    if(isset($bal_prev_container[$c_id]['container_collection'][$b_ids])){
                                        if($bal_prev_container[$c_id]['container_collection'][$b_ids] < 0){
                                            $prev_qty = $bal_prev_container[$c_id]['container_collection'][$b_ids];
                                        }else{
                                            $prev_qty = 0;
                                        }
                                    }else{
                                        $prev_qty = 0;
                                    }
                                    if($forcontainer[$c_id][$b_ids]+$sum_bal+$prev_qty < 0){
                                        $final_container[$c_id][$b_ids]=0;
                                    }else{
                                        $final_container[$c_id][$b_ids]=$forcontainer[$c_id][$b_ids]+$sum_bal+$prev_qty;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } #contri foreach

        $final_royalties = array();
        foreach($final_container as $c_id =>$values){
            $final_royalties[$c_id]=['total'=>array_sum($values),'user_name'=>$contri_name[$c_id] ];
        }
        usort($final_royalties, function($a, $b){ 
            return strcasecmp($a["user_name"], $b["user_name"]); 
        });
        $pdf = PDF::loadView('pdf/royalty_report',compact('final_royalties','selected_quarter','selected_year','week_from','week_to'));
        return $pdf->stream(); //to view the pdf
        die;
    }  /* end download_royaltyreport action*/

/**
Previous quarter sales : book sales tab , contains values of previous quarter
#diamond query updated on 16 July 2018
**/

    public function book_sales_prev(Request $request){
        #redirect to home if user not a contributor
        #GET BOOK IDS
        if(isset($_GET['added_by'])){ #dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #current date
        $current = floor((date('n') - 1) / 3);
        $year = date('y');
        $quarters = array();
        $q = "";
        $mysql_qty = "";
        for($i = 0; $i < 5; $i++){
           $q = (($current+$i)%4) + 1;
        }
        $mysql_qty = $q;
        #session
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        $mysql_qty = $selected_quarter;
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #session dates
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
            $week_to = \Session::get('week_to');
        }
        #forcontainer array
        $container_b_id[]=array();
        #GET BOOK IDS
        if(isset($_GET['book_id'])){
           $book_id[] = $_GET['book_id'];
        }else{
            #get all the book id of the contributors 
            $c_id = $_GET['contri_id'];
            try{
                $book_id = DB::table("book_details")
                ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
                })
                ->leftJoin('contributor_roles', function ($join) {
                $join->on('assign_contributors.role_id', '=', 'contributor_roles.id');
                })
                ->where(function ($query) {
                    $query->where('book_details.merged_book','!=',1)
                        ->orWhereNull('book_details.merged_book');
                })
                ->where('assign_contributors.contributor_id', $c_id)
                ->pluck('book_details.id as book_id')->toArray();
            }catch(\Exception $e){
                return $e->getMessage();
            }
        }

        #GET ALL COINTAINER /CONTAINED ITEMS IDS
        try{
            $get_ids = DB::table('book_vol_containers')
            ->select('book_main_id','contained_book_id')
            ->where(function ($query) use ($book_id){
                $query->whereIn('book_main_id',$book_id)
                    ->orwhereIn('contained_book_id',$book_id);
            })->Get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        if($get_ids->isEmpty()){
            $all_ids = array_values(array_unique($book_id));
            $all_books_old=$book_id;
        }else{
            $all_ids = array();
            foreach($get_ids as $item){
                $item = get_object_vars($item);
                $all_ids[] =  $item['book_main_id'];
                $all_ids[] =  $item['contained_book_id'];
            }
            #collection of all the books wth contained and container items
            $all_books_old = array_values(array_unique($all_ids));
        }
        ############ FILTERSSS ##################

        ##OUT OF PRINT
        try{
            $op_books = DB::table('book_details')->whereIn('id',$all_books_old)->where('out_of_print',1)->pluck('id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }
        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books

        $all_books = array();
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
            foreach($op_books as $key=> $ids){
                if($selected_quarter != 1){ #selected quarter shud to be more than 1
                $prev_q = $selected_quarter-1;
                    if(isset($out_print_array[$ids])){
                        foreach($out_print_array[$ids] as $things){
                            if($things['year']==$selected_year){
                                $op_q = explode(',',$things['quarters']);
                                if(!in_array($prev_q,$op_q)){
                                    $not_ids[] = $ids;
                                }
                            }
                        }
                    }else{
                        $not_ids[] = $ids;
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }

        ##DISABLED BOOKS 
        try{
           $disabled_books =  DB::table('book_details')->where('added_by',$id)->where('disabled_book','=',1)->wherein('id',$all_books_old)->pluck('id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $all_books_old = array_diff($all_books_old, $not_ids);
        $all_books = array_unique(array_values(array_diff($all_books_old, $disabled_books)));
        $prevent_ids = array_merge($not_ids, $disabled_books);
        ##return zero as previous quarter value if no book to display
        if(empty($all_books)){
            #get the contributors of the books
            try{
                $book_ids_db = DB::Table('assign_contributors')
                ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage')
                ->leftJoin('users', function ($join) {
                    $join->on('users.id', '=', 'assign_contributors.contributor_id');
                })
                 ->leftJoin('book_details', function ($join) {
                    $join->on('book_details.id', '=', 'assign_contributors.book_id');
                })
                ->wherein('assign_contributors.book_id',$prevent_ids)
                ->where(function ($query) {
                    $query->where('users.merged_contributor','!=',1)
                        ->orWhereNull('users.merged_contributor');
                })
                ->where(function ($query) {
                    $query->where('book_details.merged_book','!=',1)
                        ->orWhereNull('book_details.merged_book');
                })
                ->distinct('assign_contributors.book_id')
                ->get()->toArray();
            }catch(\Exception $e){
               return $e->getMessage();
            }
            $final_container = array();
            foreach($book_ids_db as $data){
                $final_container[$data->contributors_id][$data->book_id] = 0; 
            }
            $this->book_s = $final_container;
        }
        ############## FILTER ENDS HERE ##############

        ##collecting the contributors also
        #get books assigned to contributor : used for containers collection
        try{
            $book_ids_db = DB::Table('assign_contributors')
            ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage')
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
             ->leftJoin('book_details', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->wherein('assign_contributors.book_id',$all_books)
            ->whereNotIn('assign_contributors.book_id',$prevent_ids)
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            ->distinct('assign_contributors.book_id')
            ->get() ->toArray();
        }catch(\Exception $e){
           return $e->getMessage();
        }

        #contributor_based book ids for containers
        $container_b_id = array();
        #collecting the book ids and percentages of the contributor
        foreach($book_ids_db as $item){           
            $item = get_object_vars($item);
            $container_b_id[$item['contributors_id']][]=$item['book_id'];
        }

        ##CONTAINER
        #get container and contained items collections
        try{
            $get_containted = DB::table('book_vol_containers')
            ->select('book_vol_containers.book_main_id','book_vol_containers.contained_book_id',
                'book_main.contributor_id as main_contri','book_sub.contributor_id as sub_contri')
            ->wherein('book_vol_containers.book_main_id',$book_id)
             #where not in starts
            ->whereNotIn('book_vol_containers.book_main_id',$not_ids)
            ->whereNotIn('book_vol_containers.contained_book_id',$not_ids)
            ->whereNotIn('book_main.book_id',$not_ids)
            #where not in ends
            #where not in disabled starts
            ->whereNotIn('book_vol_containers.book_main_id',$disabled_books)
            ->whereNotIn('book_vol_containers.contained_book_id',$disabled_books)
            ->whereNotIn('book_main.book_id',$disabled_books)
            #where not in disabled ends
            ->leftJoin('assign_contributors as book_main', function ($join) {
                $join->on('book_vol_containers.book_main_id', '=', 'book_main.book_id');
            })
            ->leftJoin('assign_contributors as book_sub', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'book_sub.book_id');
            })->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        $unsorted_container_list = array();
        foreach($get_containted as $item){
            $item = get_object_vars($item);
            if(isset($container_b_id[$item['main_contri']])){
                if( in_array($item['book_main_id'],$container_b_id[$item['main_contri']]) && in_array($item['contained_book_id'],$container_b_id[$item['main_contri']]) ){
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = $item['contained_book_id'];
                }else{
                    $unsorted_container_list[$item['main_contri']][$item['book_main_id']][] = '';
                }
            }
        }

        #sort out the array
        $container_list = array();
        foreach($unsorted_container_list as $c_id => $b_ids){
            foreach($b_ids as $main => $ids){
                rsort($ids);
                if(empty($ids[0])){
                    $container_list['simple']=$main;
                }else{
                    $container_list[$main]=array_filter(array_values(array_unique($ids)));
                }
            }
        }

        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$all_books)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        $print_pr = array();
        $percentage_Array = array();
        $royalty_choice = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice']; 
            $print_pr[$item['id']] = $item['print_price']; 
        }
        
        ##EXPENSE
        try{

            $expenses = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
            ->leftJoin('book_expenses', function ($join) {
            $join->on('book_details.id', '=', 'book_expenses.book_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #for custom quarter
        $qtrs_val=array();
        if($selected_quarter == 5){
            $selected_q = 'Custom Quarter (Jan - Dec)'; 
            $month1 = date('m', strtotime($week_from));//get the quarter of week from date
            $q1 = ceil($month1/3);
            $month2 = date('m', strtotime($week_to));//get the quarter of week to date
            $q2 = ceil($month2/3);
            for($qtrs=$q1; $qtrs <= $q2; $qtrs++){//collect the quarter in array
                $qtrs_val[]=$qtrs;
            }
        }

        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            #if not custom quarter
            if($selected_quarter != 5){
                if(in_array($item['id'], $all_books)){
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $expense[$item['id']]['q1'] = $item['first_quarter'];
                        $expense[$item['id']]['q2'] = $item['second_quarter'];
                        $expense[$item['id']]['q3'] = $item['third_quarter'];
                        $expense[$item['id']]['q4'] = $item['fourth_quarter'];
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                            $expense[$item['id']]['q1'] = 0;
                            $expense[$item['id']]['q2'] = 0;
                            $expense[$item['id']]['q3'] = 0;
                            $expense[$item['id']]['q4'] = 0;
                        }
                    }
                }else{
                    $expense[$item['id']]['q1'] = 0;
                    $expense[$item['id']]['q2'] = 0;
                    $expense[$item['id']]['q3'] = 0;
                    $expense[$item['id']]['q4'] = 0;
                }
                #if custom quarter sum up all the values
            }else{
                if(in_array($item['id'], $book_id)){
                    if(($selected_year == $item['year'] || empty($item['year']))){
                        $all_qtr_sum =0;
                        foreach($qtrs_val as $qtr){  
                            if($qtr == 1){
                                $all_qtr_sum +=$item['first_quarter'];
                            }
                            if($qtr == 2){
                                $all_qtr_sum +=$item['second_quarter'];
                            }
                            if($qtr == 3){
                                $all_qtr_sum +=$item['third_quarter'];
                            }
                            if($qtr == 4){
                                $all_qtr_sum +=$item['fourth_quarter'];
                            }
                        }
                        $expense[$item['id']] =$all_qtr_sum;
                    }elseif($selected_year != $item['year']){
                        if(!isset($expense[$item['id']])){
                          $expense[$item['id']]=0;  
                        }
                    }
                }else{
                    $expense[$item['id']] = 0;
                }
            }#ends condition for quarter   
        }#ends expense foreach

        ##CONTRIBUTORS
        try{
           $get_contributors  = DB::table('book_details')
            ->select('assign_contributors.contributor_id','book_details.id as book_id','users.name','assign_contributors.percentage')
            ->where('book_details.added_by',$id)
            ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $get_contributors = json_decode(json_encode($get_contributors),true);
        #collecting contributor ids
        foreach($get_contributors as $value){
            $contri_ids[$value['book_id']][$value['contributor_id']]['name'] =$value['name'];
            $contri_ids[$value['book_id']][$value['contributor_id']]['percentage'][]=$value['percentage'];
        }
       
        ##SALES
        #start and end dates of quarter
        #quarter1
        $q1_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
        $q1_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((1 * 3)) . '-1'));
        #quarter2
        $q2_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((2 * 3) - 2) . '-1'));
        $q2_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((2 * 3)) . '-1'));
        #quarter3
        $q3_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((3 * 3) - 2) . '-1'));
        $q3_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((3 * 3)) . '-1'));
        #sales digital
        $digital_info1 = array();#for 1st qtr
        $digital_info2 = array();#for 2nd qtr
        $digital_info3 = array();#for 3rd qtr
        #Quantity digital
        $digital_qty1 = array();#for 1st qtr
        $digital_qty2 = array();#for 2nd qtr
        $digital_qty3 = array();#for 3rd qtr

        ##amazon sales
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units') 
            ->leftJoin('amazon_sales_reports', function ($join) {
                $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();     
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }

        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['amazon_invoice_date'] >= $q1_first_date && $item['amazon_invoice_date']<=$q1_last_date || empty($item['amazon_invoice_date'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty1[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0; 
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['amazon_invoice_date'] >= $q2_first_date && $item['amazon_invoice_date']<=$q2_last_date || empty($item['amazon_invoice_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['amazon_invoice_date'] >= $q3_first_date && $item['amazon_invoice_date']<=$q3_last_date || empty($item['amazon_invoice_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0; 
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }
        }

        ##Apple Sales
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['apple_start_date']>=$q1_first_date && $item['apple_start_date']<=$q1_last_date || empty($item['apple_start_date'])){

                $digital_info1[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty1[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['apple_start_date']>=$q2_first_date && $item['apple_start_date']<=$q2_last_date || empty($item['apple_start_date'])){

                $digital_info2[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty2[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;
                $digital_qty2[$item['book_id']]['qty'][]=0;
            }
            #quarter 3
            if($item['apple_start_date']>=$q3_first_date && $item['apple_start_date']<=$q3_last_date || empty($item['apple_start_date'])){

                $digital_info3[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;
                $digital_qty3[$item['book_id']]['qty'][]=0;   
            }           
        }

        ##barnes and nobles Sales
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_invoice_date']>=$q1_first_date && $item['custom_invoice_date']<=$q1_last_date || empty($item['custom_invoice_date'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['units_sold'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0; 
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            }
            #quarter 2
            if($item['custom_invoice_date']>=$q2_first_date && $item['custom_invoice_date']<=$q2_last_date || empty($item['custom_invoice_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['units_sold'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            }
            #quarter 3
            if($item['custom_invoice_date']>=$q3_first_date && $item['custom_invoice_date']<=$q2_last_date || empty($item['custom_invoice_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['units_sold'];  
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }
        }

        ##comixology Sales
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
             ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1 
            if($item['custom_sale_date_comix']>=$q1_first_date && $item['custom_sale_date_comix']<=$q1_last_date || empty($item['custom_sale_date_comix'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['sum_of_quantity'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['custom_sale_date_comix']>=$q2_first_date && $item['custom_sale_date_comix']<=$q2_last_date || empty($item['custom_sale_date_comix'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd']; 
                $digital_qty2[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            }
            #quarter 3
            if($item['custom_sale_date_comix']>=$q3_first_date && $item['custom_sale_date_comix']<=$q3_last_date || empty($item['custom_sale_date_comix'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty3[$item['book_id']]['qty'][]=$item['sum_of_quantity'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }           
        }

        ##comixology subscription Sales
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
             ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }

        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1 
            if($item['custom_date_comix_subs']>=$q1_last_date && $item['custom_date_comix_subs']<=$q1_first_date || empty($item['custom_date_comix_subs'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty1[$item['book_id']]['qty'][]=$item['pages_read'];
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0; 
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            }
            #quarter 2
            if($item['custom_date_comix_subs']>=$q2_first_date && $item['custom_date_comix_subs']<=$q2_last_date || empty($item['custom_date_comix_subs'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['pages_read'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            }
            #quarter 3
            if($item['custom_date_comix_subs']>=$q3_last_date && $item['custom_date_comix_subs']<=$q3_first_date || empty($item['custom_date_comix_subs'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty3[$item['book_id']]['qty'][]=$item['pages_read'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;
                $digital_qty3[$item['book_id']]['qty'][]=0;  
            } 
        }

        ##google Sales

        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_sale_date_google']<=$q1_last_date && $item['custom_sale_date_google']>=$q1_first_date || empty($item['custom_sale_date_google'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['earnings_amount']; 
                $digital_qty1[$item['book_id']]['qty'][]=$item['quantity']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            } 

            #quarter 2
            if($item['custom_sale_date_google']<=$q2_last_date && $item['custom_sale_date_google']>=$q2_first_date || empty($item['custom_sale_date_google'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty2[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0;
            } 

            #quarter 3
            if($item['custom_sale_date_google']<=$q3_last_date && $item['custom_sale_date_google']>=$q3_first_date || empty($item['custom_sale_date_google'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['earnings_amount']; 
                $digital_qty3[$item['book_id']]['qty'][]=$item['quantity']; 
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;
                $digital_qty3[$item['book_id']]['qty'][]=0;  
            }            
        }

        ##oni press sales
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
                $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_sale_date_oni_con']<=$q1_last_date && $item['custom_sale_date_oni_con']>=$q1_first_date || empty($item['custom_sale_date_oni_con'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['net_sales']*(0.9); 
                $digital_qty1[$item['book_id']]['qty'][]=$item['items_sold']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['custom_sale_date_oni_con']<=$q2_last_date && $item['custom_sale_date_oni_con']>=$q2_first_date || empty($item['custom_sale_date_oni_con'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['net_sales']*(0.9);  
                $digital_qty2[$item['book_id']]['qty'][]=$item['items_sold'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            }
            #quarter 3
            if($item['custom_sale_date_oni_con']<=$q3_last_date && $item['custom_sale_date_oni_con']>=$q3_first_date || empty($item['custom_sale_date_oni_con'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['net_sales']*(0.9);  
                $digital_qty3[$item['book_id']]['qty'][]=$item['items_sold'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            } 
        }

        ##oni sHopify sales
        
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_date']<=$q1_last_date && $item['custom_date']>=$q1_first_date || empty($item['custom_date'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['total_sales']*(0.9);
                $digital_qty1[$item['book_id']]['qty'][]=$item['net_quantity']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0;
            }
            #quarter 2
            if($item['custom_date']<=$q2_last_date && $item['custom_date']>=$q2_first_date || empty($item['custom_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['total_sales']*(0.9);
                $digital_qty2[$item['book_id']]['qty'][]=$item['net_quantity'];
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0; 
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            }
            #quarter 3
            if($item['custom_date']<=$q3_last_date && $item['custom_date']>=$q3_first_date || empty($item['custom_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['total_sales']*(0.9);
                $digital_qty3[$item['book_id']]['qty'][]=$item['net_quantity'];
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0;
            }
        }

        ##S & S sales        
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.dollar_net','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_books)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            #quarter 1
            if($item['custom_invoice_date']<=$q1_last_date && $item['custom_invoice_date']>=$q1_first_date || empty($item['custom_invoice_date'])){
                $digital_info1[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty1[$item['book_id']]['qty'][]=$item['unit_net']; 
            }else{
                $digital_info1[$item['book_id']]['sales_info'][]=0;  
                $digital_qty1[$item['book_id']]['qty'][]=0; 
            }
            #quarter 2
            if($item['custom_invoice_date']<=$q2_last_date && $item['custom_invoice_date']>=$q2_first_date || empty($item['custom_invoice_date'])){
                $digital_info2[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty2[$item['book_id']]['qty'][]=$item['unit_net']; 
            }else{
                $digital_info2[$item['book_id']]['sales_info'][]=0;  
                $digital_qty2[$item['book_id']]['qty'][]=0; 
            }
            #quarter 3
            if($item['custom_invoice_date']<=$q3_last_date && $item['custom_invoice_date']>=$q3_first_date || empty($item['custom_invoice_date'])){
                $digital_info3[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty3[$item['book_id']]['qty'][]=$item['unit_net'];   
            }else{
                $digital_info3[$item['book_id']]['sales_info'][]=0;  
                $digital_qty3[$item['book_id']]['qty'][]=0; 
            }
        }
        $book_ids1 = implode(',', $all_books);

        ##FIRST Quarter
        $q1_first_date=trim($q1_first_date);
        $q1_last_date=trim($q1_last_date);
        try{
            $diamond_sales_q1 = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_to <= '".$q1_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q1_first_date."' and book_financials.week_from <= '".$q1_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q1_last_date."' and book_financials.week_to >= '".$q1_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }
        $diamond_sales_q1 = json_decode(json_encode($diamond_sales_q1),true);
            
        ##SECOND Quarter
        $q2_first_date=trim($q2_first_date);
        $q2_last_date=trim($q2_last_date);
        try{
            $diamond_sales_q2 = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_to <= '".$q2_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q2_first_date."' and book_financials.week_from <= '".$q2_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q2_last_date."' and book_financials.week_to >= '".$q2_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }
        $diamond_sales_q2 = json_decode(json_encode($diamond_sales_q2),true);
            
        ##THIRD Quarter
        $q3_first_date=trim($q3_first_date);
        $q3_last_date=trim($q3_last_date);
        try{
            $diamond_sales_q3 = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_to <= '".$q3_last_date."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$q3_first_date."' and book_financials.week_from <= '".$q3_last_date."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$q3_last_date."' and book_financials.week_to >= '".$q3_first_date."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }
        $diamond_sales_q3 = json_decode(json_encode($diamond_sales_q3),true);
        
        ##FIRST QUARTER DIAMOND ARRAY
        foreach($diamond_sales_q1 as $item){
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty retail
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_disc1[$item['id']][$item['market']] =  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['DIRECT_MARKET_STORES']= [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q1,
                        'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                        'discount'=>$total_cost_stores_disc1[$item['id']][$item['market']],
                        'unit_retail1'=>0,

                    ];
                }
            }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['DIRECT_MARKET_STORES'] )){
                $sales_data1[$item['id']]['calculas']['DIRECT_MARKET_STORES']= 
                [
                'store'=>'DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    #unit retail
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q1,
                    'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc1[$item['id']][$item['market']]
                    ];
                }  
            }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE'] )){
                $sales_data1[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q1,
                    'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc1[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($sales_data1[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES'] )){
                $sales_data1[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    #qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #unit retail
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q1,
                    'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc1[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['NON-DIRECT_SHORTAGE'] )){
                $sales_data1[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    #qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q1,
                    'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc1[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                $sales_data1[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    #total qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #total cost
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q1,
                        'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc1[$item['id']][$item['market']]

                        ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $sales_data1[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                $sales_data1[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    #qty
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q1,
                    'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc1[$item['id']][$item['market']],
                    ];
                }

            }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['DIRECT_RETURNS'] )){
                $sales_data1[$item['id']]['calculas']['DIRECT_RETURNS']= [
                    'store'=>'DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' =>0,
                    'total_cost1.1'=>0,
                    'discount' =>0,
                ];
            }

            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    #qty sold
                    $total_cost_stores_q1[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q1 = array_sum($total_cost_stores_q1[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores1[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc1[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data1[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q1,
                        'unit_retails' => $total_cost_stores1[$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount' => $total_cost_stores_desc1[$item['id']][$item['market']],
                        ];
                }
            }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $sales_data1[$item['id']]['calculas']['NON-DIRECT_RETURNS'])){
                $sales_data1[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                [
                'store'=>'NON-DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost12'=>0,
                'discount' => 0,
                ];
            }
            $sales_data1[$item['id']]['calculas']['digital_sales']=array_sum($digital_info1[$item['id']]['sales_info']);
        }

        ##SECOND QUARTER DIAMOND SALES
        foreach($diamond_sales_q2 as $item){
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty retail
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_disc2[$item['id']][$item['market']] =  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['DIRECT_MARKET_STORES']= [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q2,
                        'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                        'discount'=>$total_cost_stores_disc2[$item['id']][$item['market']],
                        'unit_retail1'=>0,

                    ];
                }
            }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['DIRECT_MARKET_STORES'] )){
                $sales_data2[$item['id']]['calculas']['DIRECT_MARKET_STORES']= 
                [
                'store'=>'DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    #unit retail
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc2[$item['id']][$item['market']]

                    ];
                }
            }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE'] )){
                $sales_data2[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc2[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($sales_data2[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES'] )){
                $sales_data2[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    #qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #unit retail
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc2[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['NON-DIRECT_SHORTAGE'] )){
                $sales_data2[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    #qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc2[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                $sales_data2[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    #total qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #total cost
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q2,
                        'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc2[$item['id']][$item['market']]

                        ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $sales_data2[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                $sales_data2[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    #qty
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc2[$item['id']][$item['market']],
                    ];
                }

            }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['DIRECT_RETURNS'] )){
                $sales_data2[$item['id']]['calculas']['DIRECT_RETURNS']= [
                    'store'=>'DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' =>0,
                    'total_cost1.1'=>0,
                    'discount' =>0,
                ];
            }

            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    #qty sold
                    $total_cost_stores_q2[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q2 = array_sum($total_cost_stores_q2[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores2[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc2[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data2[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q2,
                    'unit_retails' => $total_cost_stores2[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' =>$total_cost_stores_desc2[$item['id']][$item['market']],
                    ];
                }  
            }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $sales_data2[$item['id']]['calculas']['NON-DIRECT_RETURNS'] )){
                $sales_data2[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    ['store'=>'NON-DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost12'=>0,
                    'discount' => 0,];
            }
            $sales_data2[$item['id']]['calculas']['digital_sales']=array_sum($digital_info2[$item['id']]['sales_info']);
        }

        ##DIAMOND SALES THIRD QUARTER
        foreach($diamond_sales_q3 as $item){
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                #unit retail
                $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                #qty retail
                $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                #discount
                $total_cost_stores_disc3[$item['id']][$item['market']] =  trim($item['desc_percentage']);
                $sales_data3[$item['id']]['calculas']['DIRECT_MARKET_STORES']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'discount'=>$total_cost_stores_disc3[$item['id']][$item['market']],
                    'unit_retail1'=>0,
                    ];
                }
            }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['DIRECT_MARKET_STORES'] )){
                $sales_data3[$item['id']]['calculas']['DIRECT_MARKET_STORES']= 
                [
                    'store'=>'DIRECT_MARKET_STORES',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost1.1'=>0,
                    'discount'=>0
                ];
            }
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    #unit retail
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc3[$item['id']][$item['market']]
                    ];
                }  
            }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE'] )){
                $sales_data3[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                [
                'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc3[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($sales_data3[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES'] )){
                $sales_data3[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    #qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #unit retail
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc3[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['NON-DIRECT_SHORTAGE'] )){
                $sales_data3[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    #qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc3[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                $sales_data3[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    #total qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #total cost
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc3[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $sales_data3[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                $sales_data3[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    #qty
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc3[$item['id']][$item['market']],
                    ];
                }
            }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['DIRECT_RETURNS'] )){
                $sales_data3[$item['id']]['calculas']['DIRECT_RETURNS']= [
                    'store'=>'DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' =>0,
                    'total_cost1.1'=>0,
                    'discount' =>0,
                ];
            }
            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    #qty sold
                    $total_cost_stores_q3[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q3 = array_sum($total_cost_stores_q3[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores3[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #discount
                    $total_cost_stores_desc3[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data3[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q3,
                    'unit_retails' => $total_cost_stores3[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc3[$item['id']][$item['market']],
                    ];
                }  
            }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $sales_data3[$item['id']]['calculas']['NON-DIRECT_RETURNS'] )){
                $sales_data3[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                [
                'store'=>'NON-DIRECT_RETURNS',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost12'=>0,
                'discount' => 0,

                ];
            }
            $sales_data3[$item['id']]['calculas']['digital_sales']=array_sum($digital_info2[$item['id']]['sales_info']);
        }

        ##FIRST QTR TOTAL
        $gross_sales = array();
        $book_reports = array();
        $total_profit = array();
        foreach($all_books as $ids){
            $net_direct_revenue =  ($sales_data1[$ids]['calculas']['DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data1[$ids]['calculas']['DIRECT_MARKET_STORES']['discount']/100))*$sales_data1[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data1[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['unit_retails'] *(1-($sales_data1[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['discount']/100))*$sales_data1[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold'])+( $sales_data1[$ids]['calculas']['DIRECT_RETURNS']['unit_retails'] *(1-($sales_data1[$ids]['calculas']['DIRECT_RETURNS']['discount']/100))*$sales_data1[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']);
            #non direct
            $net_non_dir_revenue = ($sales_data1[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data1[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['discount']/100))*$sales_data1[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data1[$ids]['calculas']['NON-DIRECT_SHORTAGE']['unit_retails'] *(1-($sales_data1[$ids]['calculas']['NON-DIRECT_SHORTAGE']['discount']/100))*$sales_data1[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']);
            #returns
            $return_revenue =  $sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails'] * $sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
            $net_revenue = $sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails']*(1-($sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['discount']/100)) * $sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
            #international
            $net_internatioal_revenue = $sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
            ##total qty
            $total_qty1 = $sales_data1[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold']+$sales_data1[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$sales_data1[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']+$sales_data1[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data1[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold']+$sales_data1[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']+$sales_data1[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty1[$ids]['qty']);
            #totals
            $gross_sales = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info1[$ids]['sales_info']);
            #total expense #
            $sum = $expense[$ids]['q1'];
            #full percentage to the book
            $divide_by_val[$ids] = array_sum($percentage_Array[$ids]);
            #royalty choice checks : if choice is net/cover price
            if($royalty_choice[$ids] == 1 || $royalty_choice[$ids] == NULL){
                #profit
                $total_profit[$ids] = $gross_sales-$sum;
                $original_total[$ids] = $total_profit[$ids];
                $total_profit[$ids] = $total_profit[$ids]*$divide_by_val[$ids]/100;
            }
            #royalty choice checks : if choice is gross
            if($royalty_choice[$ids] == 2){
                #profit
                $total_profit[$ids] = $gross_sales;
                $original_total[$ids] = $total_profit[$ids];
                $total_profit[$ids] = $total_profit[$ids];
            }
            #royalty choice checks : if choice is cover price
            if($royalty_choice[$ids] == 3){
                #profit
                $total_profit[$ids] = $gross_sales-$sum;
                $original_total[$ids] = $total_profit[$ids];
                $total_profit[$ids] = $print_pr[$ids]*$total_qty1*$divide_by_val[$ids]/100;
            }
            #profit & sales
            $book_reports['book_report'][$ids][]= array('book_id'=>$ids,'gross_sales'=>$gross_sales,'total_profit'=>$total_profit[$ids],'expense'=>$sum);
        }

        ##SECOND QTR TOTAL
        $gross_sales2 = array();
        $book_reports2 = array();
        $total_profit2 = array();
        foreach($all_books as $ids){
            $net_direct_revenue =  ($sales_data2[$ids]['calculas']['DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data2[$ids]['calculas']['DIRECT_MARKET_STORES']['discount']/100))*$sales_data2[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data2[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['unit_retails'] *(1-($sales_data2[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['discount']/100))*$sales_data2[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold'])+( $sales_data2[$ids]['calculas']['DIRECT_RETURNS']['unit_retails'] *(1-($sales_data2[$ids]['calculas']['DIRECT_RETURNS']['discount']/100))*$sales_data2[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']);
            #non direct
            $net_non_dir_revenue = ($sales_data2[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data2[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['discount']/100))*$sales_data2[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data2[$ids]['calculas']['NON-DIRECT_SHORTAGE']['unit_retails'] *(1-($sales_data2[$ids]['calculas']['NON-DIRECT_SHORTAGE']['discount']/100))*$sales_data2[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']);
            #returns
            $return_revenue =  $sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails'] * $sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
            $net_revenue = $sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails']*(1-($sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['discount']/100)) * $sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
            #international
            $net_internatioal_revenue = $sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
            ##total qty
            $total_qty2 = $sales_data2[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold']+$sales_data2[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$sales_data2[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']+$sales_data2[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data2[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold']+$sales_data2[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']+$sales_data2[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty2[$ids]['qty']);
            #totals
            $gross_sales2 = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info2[$ids]['sales_info']);
            #total expense #
            $sum = $expense[$ids]['q2'];
            #contributor's portion
            $divide_by_val2[$ids] = array_sum($percentage_Array[$ids]);
            #royalty choice checks : if choice is net/cover price
            if($royalty_choice[$ids] == 1 || $royalty_choice[$ids] == NULL){
                #profit
                $total_profit2[$ids] = $gross_sales2-$sum;
                $total_profit2[$ids] = $total_profit2[$ids]*$divide_by_val2[$ids]/100;
            }
            #royalty choice checks : if choice is gross
            if($royalty_choice[$ids] == 2){
                #profit
                $total_profit2[$ids] = $gross_sales2-$sum;
                $total_profit2[$ids] = $total_profit2[$ids];
            }
            #royalty choice checks : if choice is cover price
            if($royalty_choice[$ids] == 3){
                #profit
                $total_profit2[$ids] = $gross_sales2-$sum;
                $total_profit2[$ids] =$print_pr[$ids]*$total_qty2*$divide_by_val2[$ids]/100;
            }
            #profit & sales
            $book_reports2['book_report'][$ids][]= array('book_id'=>$ids,'gross_sales'=>$gross_sales2,'total_profit'=>$total_profit2[$ids],'expense'=>$sum);
        }

        ## THIRD QTR TOTAL
        $gross_sales3 = array();
        $book_reports3 = array();
        $total_profit3 = array();
        foreach($all_books as $ids){
            $net_direct_revenue =  ($sales_data3[$ids]['calculas']['DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data3[$ids]['calculas']['DIRECT_MARKET_STORES']['discount']/100))*$sales_data3[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data3[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['unit_retails'] *(1-($sales_data3[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['discount']/100))*$sales_data3[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold'])+( $sales_data3[$ids]['calculas']['DIRECT_RETURNS']['unit_retails'] *(1-($sales_data3[$ids]['calculas']['DIRECT_RETURNS']['discount']/100))*$sales_data3[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']);
            #non direct
            $net_non_dir_revenue = ($sales_data3[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['unit_retails'] *(1-($sales_data3[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['discount']/100))*$sales_data3[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold'])+( $sales_data3[$ids]['calculas']['NON-DIRECT_SHORTAGE']['unit_retails'] *(1-($sales_data3[$ids]['calculas']['NON-DIRECT_SHORTAGE']['discount']/100))*$sales_data3[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']);
            #returns
            $return_revenue =  $sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails'] * $sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
            $net_revenue = $sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['unit_retails']*(1-($sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['discount']/100)) * $sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
            #international
            $net_internatioal_revenue = $sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
            ##total qty
            $total_qty3 = $sales_data3[$ids]['calculas']['DIRECT_MARKET_STORES']['qty_sold']+$sales_data3[$ids]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$sales_data3[$ids]['calculas']['NON-DIRECT_SHORTAGE']['qty_sold']+$sales_data3[$ids]['calculas']['NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$sales_data3[$ids]['calculas']['NON-DIRECT_RETURNS']['qty_sold']+$sales_data3[$ids]['calculas']['DIRECT_RETURNS']['qty_sold']+$sales_data3[$ids]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty3[$ids]['qty']);
            #totals
            $gross_sales3 = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+array_sum($digital_info3[$ids]['sales_info']);
            #total expense
            $sum = $expense[$ids]['q3'];
            #contributor's portion
            $divide_by_val3[$ids] = array_sum($percentage_Array[$ids]);
            #royalty choice checks : if choice is net/cover price
            if($royalty_choice[$ids] == 1 || $royalty_choice[$ids] == NULL){
                #profit
                $total_profit3[$ids] = $gross_sales3-$sum;
                $total_profit3[$ids] = $total_profit3[$ids]*$divide_by_val3[$ids]/100;
            }
            #royalty choice checks : if choice is gross
            if($royalty_choice[$ids] == 2){
                #profit
                $total_profit3[$ids] = $gross_sales3;
                $total_profit3[$ids] = $total_profit3[$ids];
            }
            #royalty choice checks : if choice is cover price
            if($royalty_choice[$ids] == 3){
                #profit
                $total_profit3[$ids] = $gross_sales3-$sum;
                $total_profit3[$ids] =$print_pr[$ids]*$total_qty3*$divide_by_val3[$ids]/100;
            }
            #profit & sales 
            $book_reports3['book_report'][$ids][]= array('book_id'=>$ids,'gross_sales'=>$gross_sales3,'total_profit'=>$total_profit3[$ids],'expense'=>$sum);
        }

        ##ADANCES
        try{
            $db_amount_query = DB::table('book_details')
            ->select('book_advances.amount','book_advances.year','book_advances.quarter','book_advances.id as a_id','book_details.id as book_id') 
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id', '=', 'book_details.id');
            })
            ->whereIn('book_details.id',$all_books)
            ->where(function ($query) {
            $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })->get()->toarray();
        }catch(\Exception $e){
            return $e->getMessage().' Line no db_amount_q '.$e->getLine();
        }
        #quarter 1 amount/percentage
        $amount_current_quarter = array();
        $amount_current_quarter2 = array();
        $amount_current_quarter3 = array();
        foreach($db_amount_query as $item){
            $item = get_object_vars($item);
            ##for quarter 1
            if($item['quarter']==1 && $item['year'] == $selected_year){
                $amount_current_quarter[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset($amount_current_quarter[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                }
            }
            ##for quarter 2
            if($item['quarter']==2 && $item['year'] == $selected_year){
                $amount_current_quarter2[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset($amount_current_quarter2[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter2[$item['book_id']][$item['a_id']]=0;
                }
            }
            ##for quarter 3
            if($item['quarter']==3 && $item['year'] == $selected_year){
                $amount_current_quarter3[$item['book_id']][$item['a_id']] =$item['amount'];
            }else{
                if(!isset($amount_current_quarter3[$item['book_id']][$item['a_id']])){
                    $amount_current_quarter3[$item['book_id']][$item['a_id']]=0;
                }
            }
        }

        ##CONTRIBUTOR'S DUE : total profit - advance of the book
        #FIRST QTR
        $profit_due = array();
        foreach($book_reports['book_report'] as $book_id => $data_book){
            foreach($data_book as $item){
                #full percentage to the book
                $divide_by_val = array_sum($percentage_Array[$book_id]);
                #checking the royalty choices : net and cover price
                if($royalty_choice[$book_id] == 1 ||$royalty_choice[$book_id] == NULL ||$royalty_choice[$book_id] == 3){
                    $profit_due[$book_id] =  $item['total_profit'] + array_sum($amount_current_quarter[$book_id]);
                }
                #checking the royalty choices : gross
                if($royalty_choice[$book_id] == 2 ){
                    $profit_due[$book_id] = ($item['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter[$book_id]);
                }
            }
        }

        #SECOND QTR
        $profit_due2 = array();
        foreach($book_reports2['book_report'] as $book_id => $data_book){
            foreach($data_book as $item){
                #full percentage to the book
                $divide_by_val = array_sum($percentage_Array[$book_id]);
                #checking the royalty choices : net and cover price
                if($royalty_choice[$book_id] == 1 ||$royalty_choice[$book_id] == NULL ||$royalty_choice[$book_id] == 3){
                    $profit_due2[$book_id]= $item['total_profit'] + array_sum($amount_current_quarter2[$book_id]);
                }
                #checking the royalty choices : gross
                if($royalty_choice[$book_id] == 2 ){
                    $profit_due2[$book_id] = ($item['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter2[$book_id]);
                }
            }
        }

        #THIRD QTR
        $profit_due3 = array();
        foreach($book_reports3['book_report'] as $book_id => $data_book){
            foreach($data_book as $item){
                #full percentage to the book
                $divide_by_val = array_sum($percentage_Array[$book_id]);
                #checking the royalty choices : net and cover price
                if($royalty_choice[$book_id] == 1 ||$royalty_choice[$book_id] == NULL ||$royalty_choice[$book_id] == 3){
                    $profit_due3[$book_id]= $item['total_profit'] + array_sum($amount_current_quarter3[$book_id]);
                }
                #checking the royalty choices : gross
                if($royalty_choice[$book_id] == 2 ){
                    $profit_due3[$book_id] = ($item['total_profit']*$divide_by_val/100) + array_sum($amount_current_quarter3[$book_id]);
                }
            }
        }
        ##CONTRIBUTOR'S PORTION : profit due * (percentage * 2)
        $contri_share1 = array();
        $contri_share2 = array();
        $contri_share3 = array();
        #container array
        $forcontainer1 = array();
        $forcontainer2 = array();
        $forcontainer3 = array();
        foreach($contri_ids as $book_id => $contri_info){
            foreach($contri_info as $c_id => $c_data){
                #full percentage to the book
                $full_per = array_sum($percentage_Array[$book_id]);
                #manage payout to the book
                $manage_pay = array_sum($c_data['percentage']);
                $contri_share_forfirst[$book_id][$c_id] = 0;
                if($full_per == 0){
                    #FIRST QTR 
                    $forcontainer1[$c_id][$book_id] = $profit_due[$book_id] * 0;
                    #SECOND QTR
                    $forcontainer2[$c_id][$book_id] = $profit_due2[$book_id] * 0;
                    #THIRD QTR
                    $forcontainer3[$c_id][$book_id] = $profit_due3[$book_id] *0 ;
                }else{
                    #FIRST QTR 
                    $forcontainer1[$c_id][$book_id] = $profit_due[$book_id] * ($manage_pay/$full_per);                    
                    #SECOND QTR
                    $forcontainer2[$c_id][$book_id] = $profit_due2[$book_id] * ($manage_pay/$full_per);
                    #THIRD QTR
                    $forcontainer3[$c_id][$book_id] = $profit_due3[$book_id] *($manage_pay/$full_per) ;
                }
            }
        }

        ##quarter calculations based on the container and contained items
        #forcontainer
        $final_container1 = array();
        $final_container2 = array();
        $final_container3 = array();
        $final_container = array();
        #sum of the contained items
        $sum_value1 = array();
        $sum_value2 = array();
        $sum_value3 = array();
        foreach($forcontainer1 as $c_id => $data){
            foreach($container_list as $main_id => $container ){  
                if($main_id=='simple'){
                   if(isset($forcontainer1[$c_id][$container])){
                        $sum_value1[$c_id][$container][] = 0;
                    }
                    if(isset($forcontainer2[$c_id][$container])){
                         $sum_value2[$c_id][$container][] = 0;
                    }
                    if(isset($forcontainer3[$c_id][$container])){
                         $sum_value3[$c_id][$container][] = 0;
                    }
                }else{
                    foreach($container as $ids){   
                        if(!empty($ids)){
                                if(isset($forcontainer1[$c_id][$ids])){
                                    $sum_value1[$c_id][$main_id][] = $forcontainer1[$c_id][$ids];
                                }
                                if(isset($forcontainer2[$c_id][$ids])){
                                     $sum_value2[$c_id][$main_id][] = $forcontainer2[$c_id][$ids];
                                }
                                if(isset($forcontainer3[$c_id][$ids])){
                                     $sum_value3[$c_id][$main_id][] = $forcontainer3[$c_id][$ids];
                                }
                        }else{
                            $sum_value1[$c_id][$main_id][] =0 ;
                            $sum_value2[$c_id][$main_id][] =0 ;
                            $sum_value3[$c_id][$main_id][] =0 ;
                        }
                    }
                }
            }
        }
        #first quarter
        foreach($forcontainer1 as $c_id => $books){
            foreach($books as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(array_key_exists($b_ids, $container_list)){
                        #forcollecting the sum of its contained items
                        $sum_bal = 0;
                        if(isset($sum_value1[$c_id][$b_ids])){
                            foreach($sum_value1[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            }
                        }
                        #make the main array
                        if(!empty($container_list[$b_ids][0])){
                            $final_container1[$c_id][$b_ids]=$forcontainer1[$c_id][$b_ids]+$sum_bal;
                            $final_container[$c_id][$b_ids]=0;
                        }
                    }
                }
                if(empty($container_list)){
                    $final_container1[$c_id][$b_ids]=$forcontainer1[$c_id][$b_ids];
                }
            }
        }

        foreach($forcontainer2 as $c_id => $books){
            foreach($books as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(array_key_exists($b_ids, $container_list)){
                        #forcollecting the sum of its contained items
                        $sum_bal = 0;
                        if(isset($sum_value2[$c_id][$b_ids])){
                            foreach($sum_value2[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            }
                        }
                        #make the main array
                        if(!empty($container_list[$b_ids][0])){
                            if($final_container1[$c_id][$b_ids] < 0 ){
                                $prev_qty = $final_container1[$c_id][$b_ids];
                            }else{
                                $prev_qty = 0;
                            }
                            $final_container2[$c_id][$b_ids]=$forcontainer2[$c_id][$b_ids]+$sum_bal+$prev_qty;
                        }
                    }
                }
                if(empty($container_list)){
                    if($final_container1[$c_id][$b_ids] < 0 ){
                        $prev_qty = $final_container1[$c_id][$b_ids];
                    }else{
                        $prev_qty = 0;
                    }
                    $final_container2[$c_id][$b_ids]=$forcontainer2[$c_id][$b_ids]+$prev_qty;
                }
            }
        }

        foreach($forcontainer3 as $c_id => $books){
            foreach($books as $b_ids => $values){
                if(!empty($container_list)){
                    #check if there is a container
                    if(array_key_exists($b_ids, $container_list)){
                        #forcollecting the sum of its contained items
                        $sum_bal = 0;
                        if(isset($sum_value3[$c_id][$b_ids])){
                           foreach($sum_value3[$c_id][$b_ids] as $values){
                                $sum_bal += $values;
                            } 
                        }

                        #make the main array
                        if(!empty($container_list[$b_ids][0])){
                            if($final_container2[$c_id][$b_ids] < 0 ){
                                $prev_qty = $final_container2[$c_id][$b_ids];
                            }else{
                                $prev_qty = 0;
                            }
                            $final_container3[$c_id][$b_ids]=$forcontainer3[$c_id][$b_ids]+$sum_bal+$prev_qty;
                        }
                    }
                }
                if(empty($container_list)){
                    if($final_container2[$c_id][$b_ids] < 0 ){
                        $prev_qty = $final_container2[$c_id][$b_ids];
                    }else{
                        $prev_qty = 0;
                    }
                    $final_container3[$c_id][$b_ids]=$forcontainer3[$c_id][$b_ids]+$prev_qty;
                }
            }
        }
        if($selected_quarter == 5){
            $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
            $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
            if(\Session::get('week_from') == ""){
                $custom_week_from = $default_first_date; 
            }else{
               $custom_week_from = \Session::get('week_from');
            }  
            if(\Session::get('week_to') == ""){
                $custom_week_to = $default_last_date;
            }else{
               $custom_week_to = \Session::get('week_to');
            } 
            $custom_month = date('m', strtotime($custom_week_from));
            $custom_quarter = ceil($custom_month/3);
            if($custom_quarter==1){
                $this->book_s = $final_container;
            }
            if($custom_quarter==2){
                $this->book_s = $final_container1;
            }
            if($custom_quarter==3){
                $this->book_s = $final_container2;
            }
            if($custom_quarter==4){
                $this->book_s = $final_container3;
            }
        }else{
            if($selected_quarter==1){
                $this->book_s = $final_container;
            }
            if($selected_quarter==2){
                $this->book_s = $final_container1;
            }
            if($selected_quarter==3){
                $this->book_s = $final_container2;
            }
            if($selected_quarter==4){
                $this->book_s = $final_container3;
            }
            if($selected_quarter==5){
                $this->book_s = $final_container;
            }
        }
    } #end of book_sales_prev action

/**
report details sales; first report
diamond query updated on 12 July 2018
**/

    public function book_sales_first(Request $request){  
        #previous quarter
        $this->book_sales_prev($request);
        $previous_quarter = $this->book_s;
        #book id 
        $book_id = $request->book_id;
        #logged in user's id  i.e. when accessed through the contributor's dashboard
        if(isset($_GET['added_by'])){
            $id = $_GET['added_by'];
        }else{
            $id = Auth::user()->id;
        }
        #current date
        $current = floor((date('n') - 1) / 3);
        #years and quarters
        $year = date('y');
        $quarters = array();
        $q = "";
        $mysql_qty = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        $mysql_qty = $q;
        #session
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        $mysql_qty = $selected_quarter;
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #session dates
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        } 
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        } 
         ####checking the contained items's
        if(isset($_GET['c_id'])){
            $c_id = $_GET['c_id'];
            $whereData = [['assign_contributors.contributor_id', $c_id]];
        }else{
            $whereData = [];
        }
        try{
            $table_data = DB::table('book_vol_containers');
            if(isset($_GET['c_id'])){
                $c_id = $_GET['c_id'];
                $whereData = [['assign_contributors.contributor_id', $c_id]];
                $table_data->where($whereData);
            }
            $table_data->select('book_vol_containers.contained_book_id','book_details.disabled_book')
            ->leftJoin('book_details', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'book_details.id');
            })
            #contributor check
            ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'assign_contributors.book_id');
            })
            ->where('book_main_id',$book_id);
            $check_containees = $table_data->get();
        }catch(\Exception $e){
           return $e->getMessage();
        }
        $disabled_books = array(); #collects the disabled books
        $all_ids_old = array();
        $container_for_sales = array();
        foreach($check_containees as $data){
            $all_ids_old[] = $data->contained_book_id;
            if($data->contained_book_id == 1){
                $disabled_books[] =  $data->contained_book_id;
            }
            $container_for_sales[] = $data->contained_book_id;
        }
        $all_ids_old = array_unique($all_ids_old);

        if(!$check_containees->isEmpty()){
            $all_ids_old[] = $book_id;
        }else{
            $all_ids_old[] = $book_id;
        }

        ####FILTER FOR THE BOOKS HERE###############
        ##OUT OF PRINT
        try{
            $op_books = DB::table('book_details')->whereIn('id',$all_ids_old)->where('out_of_print',1)->pluck('id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }
        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $all_ids = array();
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
           foreach($op_books as $key=> $ids){
                if(isset($out_print_array[$ids])){
                    foreach($out_print_array[$ids] as $things){
                        if($things['year']==$selected_year){
                            $op_q = explode(',',$things['quarters']);
                            if(!in_array($selected_quarter,$op_q)){
                                $not_ids[] = $ids;
                            }
                        }
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $all_ids_old = array_diff($all_ids_old, $not_ids);
        $all_ids = array_unique(array_values(array_diff($all_ids_old, $disabled_books)));
        $prevent_ids = array_merge($not_ids, $disabled_books);
        $prevent_ids = array_unique($prevent_ids);
        if(empty($all_ids)){ #prabhdeephere
            $cal_error = "No Books found. Book is either marked disabled or out of print.";
            $report_name= "Individual Sale report";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_names','contri_comment','cal_error','report_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }
        #####FILTER FOR THE BOOKS END HERE ##############

        ##BOOK DETAILS
        if(!$check_containees->isEmpty()){
            try{
                $book_details = DB::table('book_details')
                ->select('book_details.id','book_details.book_title','book_details.isbn_code','book_details.isbn_code2','book_details.isbn_code3','book_details.print_price','book_details.digital_price','book_details.container','book_details.diamond_item_code','book_details.asin_code','book_details.qb_classes','book_details.comixology_code','book_details.upc','book_details.itune_code','book_details.out_of_print','book_details.print_date','book_details.google_gg_key','book_vol_containers.contained_book_id','sub_book_data.book_title as sub_title','sub_book_data.merged_book','sub_book_data.out_of_print as sub_print_check')
                #contained item's id
                ->leftJoin('book_vol_containers', function ($join) {
                    $join->on('book_details.id', '=', 'book_vol_containers.book_main_id');
                })
                #contained item's name
                ->leftJoin('book_details as sub_book_data', function ($join) {
                    $join->on('book_vol_containers.contained_book_id', '=', 'sub_book_data.id');
                })
                ->wherein('book_details.id',$all_ids)
                ->where(function ($query) {
                    $query->where('sub_book_data.merged_book','!=',1)
                        ->orWhereNull('sub_book_data.merged_book');
                })->get();
            }catch(\Exception $e){
                return $e->getMessage();
            }
        }else{
            try{
                $book_details = DB::table('book_details')
                ->select('book_details.id','book_details.book_title','book_details.isbn_code','book_details.isbn_code2','book_details.isbn_code3','book_details.print_price','book_details.digital_price','book_details.container','book_details.diamond_item_code','book_details.asin_code','book_details.qb_classes','book_details.comixology_code','book_details.upc','book_details.itune_code','book_details.out_of_print','book_details.print_date','book_details.google_gg_key','book_vol_containers.contained_book_id','sub_book_data.book_title as sub_title','sub_book_data.merged_book','sub_book_data.out_of_print as sub_print_check')
                #contained item's id
                ->leftJoin('book_vol_containers', function ($join) {
                    $join->on('book_details.id', '=', 'book_vol_containers.book_main_id');
                })
                #contained item's name
                ->leftJoin('book_details as sub_book_data', function ($join) {
                    $join->on('book_vol_containers.contained_book_id', '=', 'sub_book_data.id');
                })
                ->wherein('book_details.id',$all_ids)
                ->where(function ($query) {
                    $query->where('sub_book_data.merged_book','!=',1)
                        ->orWhereNull('sub_book_data.merged_book');
                })->get();
            }catch(\Exception $e){
                return $e->getMessage();
            }
        }
        $book_details = json_decode(json_encode($book_details),true);
        $book_data = array();
        foreach($book_details as $data){
            $book_data[$data['id']]['title'] = $data['book_title'];
            $book_data[$data['id']]['isbn_code']=$data['isbn_code'];
            $book_data[$data['id']]['isbn_code3']=$data['isbn_code3'];
            $book_data[$data['id']]['isbn_code2']=$data['isbn_code2'];
            if(empty($data['print_price'])){
                $book_data[$data['id']]['print_price']=0;
            }else{
                $book_data[$data['id']]['print_price']=$data['print_price'];
            }
            if(empty($data['digital_price'])){
                $book_data[$data['id']]['digital_price']=0;
            }else{
                $book_data[$data['id']]['digital_price']=$data['digital_price'];
            }
            $book_data[$data['id']]['diamond_item_code']=$data['diamond_item_code'];
            $book_data[$data['id']]['asin_code']=$data['asin_code'];
            $book_data[$data['id']]['qb_classes']=$data['qb_classes'];
            $book_data[$data['id']]['comixology_code']=$data['comixology_code'];
            $book_data[$data['id']]['upc']=$data['upc'];
            $book_data[$data['id']]['itune_code']=$data['itune_code'];
            $book_data[$data['id']]['google_gg_key']=$data['google_gg_key'];
            if($data['container']==1 && !empty($data['contained_book_id']) && !in_array($data['contained_book_id'], $prevent_ids)){
                $book_data[$data['id']]['sub_title'][$data['contained_book_id']]['container_name'] = $data['sub_title'];
            }
        }

        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        #fetching the royalty choice later used in calcu the royalty due
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$all_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $print_price = array();
        $royalty_choice = array();
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice']; 
            $print_price[$item['id']] = $item['print_price'];
        }
        
        ##EXPENSE
        try{
            $expenses = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
            ->leftJoin('book_expenses', function ($join) {
                $join->on('book_details.id', '=', 'book_expenses.book_id');
            })
            ->wherein('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
           return $e->getMessage()." Line no assigned_books_arr ".$e->getLine();
        }
        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            if($item['year'] == $selected_year || $item['year']==''){
                $expense[$item['id']] = ['book_id'=>$item['id'],
                'book_title'=> $item['book_title'],
                'first_quarter'=> $item['first_quarter'],
                'second_quarter'=>  $item['second_quarter'],
                'third_quarter'=> $item['third_quarter'],
                'fourth_quarter'=> $item['fourth_quarter'],
                'year'=>  $item['year']
                ];    
            }
            if($item['year'] != $selected_year || $item['year']==''){
                if(!isset($expense[$item['id']])){
                    $expense[$item['id']] = ['book_id'=>$item['id'],
                    'book_title'=> $item['book_title'],
                    'first_quarter'=> 0,
                    'second_quarter'=> 0,
                    'third_quarter'=> 0,
                    'fourth_quarter'=> 0,
                    'year'=>  ''
                    ];  
                }
            }
        }

        ##contributors
        #if accessed throught the contributor's dashboard #dashboard
        if(isset($_GET['c_id'])){
            try{
            $get_contributors  = DB::table('book_details')
            ->select('assign_contributors.contributor_id','users.name','assign_contributors.percentage','book_details.id as book_id')
            ->where('book_details.added_by',$id)
            ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$all_ids)
            ->where('assign_contributors.contributor_id',$_GET['c_id'])->get();
            }catch(\Exception $e){
                return $e->getMessage();
            }
            #sending the creator's name if accessed through the contri's login
            try{
                $creator_name = DB::table('users')->where('id',$_GET['c_id'])->value('name');
            }catch(\Exception $e){
                return $e->getMessage();
            }
        }else{
            #if accessed throught the publisher's dashboard
            try{
                $get_contributors  = DB::table('book_details')
                ->select('assign_contributors.contributor_id','users.name','assign_contributors.percentage','book_details.id as book_id')
                ->where('book_details.added_by',$id)
                ->leftJoin('assign_contributors', function ($join) {
                    $join->on('book_details.id', '=', 'assign_contributors.book_id');
                })
                ->leftJoin('users', function ($join) {
                    $join->on('users.id', '=', 'assign_contributors.contributor_id');
                })
                ->where(function ($query) {
                    $query->where('users.merged_contributor','!=',1)
                        ->orWhereNull('users.merged_contributor');
                })
                ->wherein('book_details.id',$all_ids)->get();
            }catch(\Exception $e){
                return $e->getMessage();
            }
            $creator_name = '';
        }
        $get_contributors = json_decode(json_encode($get_contributors),true);

        #collecting contributor ids
        $contri_info = array();
        foreach($get_contributors as $value){
            $contri_info[$value['book_id']][$value['contributor_id']]['name']=$value['name'];
            $contri_info[$value['book_id']][$value['contributor_id']]['percentage'][]=$value['percentage'];
            $contri_ids[] = $value['contributor_id'];
        }

        ##########SALES##########
        ##amazon sales
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units') 
            ->leftJoin('amazon_sales_reports', function ($join) {
                $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();     
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['amazon_invoice_date'] >= $week_from && $item['amazon_invoice_date']<=$week_to || empty($item['amazon_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }
        ##Apple Sales
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);

            if($item['apple_start_date']<=$week_to && $item['apple_start_date']>=$week_from || empty($item['apple_start_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }
        ##barnes and nobles Sales
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);

            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }

        ##comixology Sales
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_comix']<=$week_to && $item['custom_sale_date_comix']>=$week_from || empty($item['custom_sale_date_comix'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }

        ##comixology subscription Sales
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }
        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date_comix_subs']<=$week_to && $item['custom_date_comix_subs']>=$week_from || empty($item['custom_date_comix_subs'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }  
        }

        ##google Sales
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_google']<=$week_to && $item['custom_sale_date_google']>=$week_from || empty($item['custom_sale_date_google'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##oni press sales
        $oni_qty = array();
        $oni_amount = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
                $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_oni_con']<=$week_to && $item['custom_sale_date_oni_con']>=$week_from || empty($item['custom_sale_date_oni_con'])){
                $oni_amount[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $oni_qty[$item['book_id']]['qty'][]=$item['items_sold'];
            }else{
                $oni_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_qty[$item['book_id']]['qty'][]=0;
            }
        }

        ##oni press sales
        $oni_shop_qty = array();
        $oni_shop_amount = array();
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date']<=$week_to && $item['custom_date']>=$week_from || empty($item['custom_date'])){
                $oni_shop_amount[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $oni_shop_qty[$item['book_id']]['qty'][]=$item['net_quantity'];
            }else{
                $oni_shop_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_shop_qty[$item['book_id']]['qty'][]=0;
            }
        }

        ##S & S sales 
        $ss_qty = array();
        $ss_amount = array();
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.dollar_net','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $ss_amount[$item['book_id']]['sales_info'][]=$item['dollar_net']; 
                $ss_qty[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $ss_amount[$item['book_id']]['sales_info'][]=0;  
                $ss_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        #diamond
        $book_ids1 = implode(',', $all_ids);
        try{
            $diamond_sales = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_from <= '".$week_to."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$week_to."' and book_financials.week_to >= '".$week_from."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }
        #CREATING DIAMOND ARRAY
        $diamond_sales = json_decode(json_encode($diamond_sales),true);
        if(!empty($book_id)){
            foreach ($diamond_sales as $item) {
             #direct
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_dir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty retail
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_disc[$item['id']][$item['market']] =  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES']= [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                        'total_cost' => $total_cost_dir[$item['id']][$item['market']],
                        'discount'=>$total_cost_stores_disc[$item['id']][$item['market']],
                        'unit_retail1'=>0,
                    ];
                }
            }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES']= 
                [
                    'store'=>'DIRECT_MARKET_STORES',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost1.1'=>0,
                    'discount'=>0
                ];
            }
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_dshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_dshortage[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }  
            }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                    'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost1.1'=>0,
                    'discount'=>0
                    ];
            }
            
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_nondir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nondir[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }
            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_nonshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nonshortage[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_intnondir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_intnondir[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    #total qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_intshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                        'total_cost' => $total_cost_intshortage[$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]

                        ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $sales_data[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_direturn[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_direturn[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc[$item['id']][$item['market']],
                    ];
                }

            }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_RETURNS'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_RETURNS']= [
                    'store'=>'DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' =>0,
                    'total_cost' =>0,
                    'total_cost1.1'=>0,
                    'discount' =>0,
                ];
            }

            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    #qty sold
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_nondireturn[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nondireturn[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc[$item['id']][$item['market']],
                    ];
                }  
            }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>'NON-DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost12'=>0,
                    'discount' => 0,

                    ];
            }
            $sales_data[$item['id']]['calculas']['digital_sales']=array_sum($digital_info[$item['id']]['sales_info']);
            $sales_data[$item['id']]['calculas']['digital_qty']=array_sum($digital_qty[$item['id']]['qty']);
            #oni sales
            $sales_data[$item['id']]['calculas']['oni_sales']=(array_sum($oni_amount[$item['id']]['sales_info'])*.90)+(array_sum($oni_shop_amount[$item['id']]['sales_info'])*.90);
            #oni qty
            $sales_data[$item['id']]['calculas']['oni_qty']=array_sum($oni_qty[$item['id']]['qty'])+array_sum($oni_shop_qty[$item['id']]['qty']);
            #ss sales
            $sales_data[$item['id']]['calculas']['ss_sales']=array_sum($ss_amount[$item['id']]['sales_info']);
            #ss qty
            $sales_data[$item['id']]['calculas']['ss_qty']=array_sum($ss_qty[$item['id']]['qty']);
            #expenses
            $sales_data[$item['id']]['book_details']['expense'] = $expense[$item['id']];
            } # main array foreach ends
        }

        #collect selected quarter advance : all advances added to the book in the selected qtr
        try{
            $advance = DB::table('book_details')
            ->select('book_advances.amount','book_advances.year','book_advances.quarter','book_advances.id as a_id','book_details.id as book_id') 
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id', '=', 'book_details.id');
            })
            ->whereIn('book_details.id',$all_ids)
            ->where(function ($query) {
            $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })->get()->toarray();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #advance current qtr : collecting advances based on the qtr selected
        $amount_current_quarter = array();
        foreach($advance as $item){
            $item = get_object_vars($item);
            #if not a custom array, filter it based on the year and quarter
            if($selected_quarter != 5 ){
                if($item['quarter']==$selected_quarter && $item['year'] == $selected_year){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }else{
                #custom quarter dates
                $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
                $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
                if(\Session::get('week_from') == ""){
                    $custom_week_from = $default_first_date; 
                }else{
                   $custom_week_from = \Session::get('week_from');
                }  
                if(\Session::get('week_to') == ""){
                    $custom_week_to = $default_last_date;
                }else{
                   $custom_week_to = \Session::get('week_to');
                } 
                $custom_quarter_from = ceil(date('m', strtotime($custom_week_from))/3);
                $custom_quarter_to = ceil(date('m', strtotime($custom_week_to))/3);
                #custom quarter amount
                if($item['year'] == $selected_year && ( $item['quarter'] >= $custom_quarter_from && $item['quarter'] <= $custom_quarter_to )){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }
        }
        ##collecting the book data and sales data together
        foreach($book_data as $book_id => $data){
            $book_data[$book_id]["sales"]=$sales_data[$book_id];
            if(isset($data['sub_title'])){
               foreach ($data['sub_title'] as $container_id => $value) {
                    if(isset($sales_data[$container_id])){
                        $book_data[$book_id]["sub_title"][$container_id]["container_sales"]=$sales_data[$container_id];
                    }
                }
            }
        }
        #returning views
        $final_book = array();
        foreach($book_data  as $book_id =>  $item){
            if(in_array($book_id, $container_for_sales)){
                $final_book['contained_items'][$book_id] = $item;
            }else{
                $final_book['main_items'][$book_id] = $item;
            }
        }
        $pdf = PDF::loadView('pdf/booksale_first',compact('contri_info','book_id','book_data','sales_data','selected_quarter', 'selected_year','week_from','week_to','out_print','amount_current_quarter','previous_quarter','check_containees','final_book','percentage_Array','royalty_choice','print_price','creator_name'));
        return $pdf->stream(); //to view the pdf
        die;
    }#ends book_sales_first controller

/**
Container collections : 1st tab : contributors
diamond query updated on 12 July 2018
**/

    public function container_contributor(Request $request){
        #global variable
        $this->download_bookreport_prev_quar($request);
        #current date
        $current = floor((date('n') - 1) / 3);
        #get current quarter
        $q = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        #session : quarter
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }    
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #session dates : week from and week to
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }  
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        } 
        #contributor id
        if(isset($_GET['contri_id'])){
            $contri_id = $_GET['contri_id'];
        }
        #logged in user id : added by redirected from the contributor's dashboard
        if(isset($_GET['added_by'])){#dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #check if user exists
        try{
            $check_user = DB::table('users')->where(['id'=>$contri_id,'added_by'=>$id])->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        #redirect is user is not found
        if($check_user->isEmpty()){
            return redirect('reports#report_by_title')->with('emptysearch_title','User doesnot exists');
        }
        #quarters calculated for amount details of custom quarter
        $month1 = date('m', strtotime($week_from));
        $q1 = ceil($month1/3);
        $month2 = date('m', strtotime($week_to));//get the quarter of week to date
        $q2 = ceil($month2/3);  
        ##quarter in words 
        if($selected_quarter == 1){
            $selected_quarter_words ='first_quarter';
        }
        if($selected_quarter == 2){
            $selected_quarter_words = 'second_quarter';
        }
        if($selected_quarter == 3){
            $selected_quarter_words = 'third_quarter';
        }
        if($selected_quarter == 4){
            $selected_quarter_words ='fourth_quarter';
        }
        if($selected_quarter == 5){
            $selected_quarter_words = 'custom_quarter';
        }
        #get books assigned to contributor
        try{
            #query
            $book_ids_db = DB::Table('assign_contributors')
            ->select('assign_contributors.book_id','users.name','users.merged_contributor','users.id as contributors_id','assign_contributors.percentage','users.contributor_comment','book_details.book_title','book_details.out_of_print','book_details.disabled_book')
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            #books join starts
            ->leftJoin('book_details', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })

            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            #books join ends
            ->where('assign_contributors.contributor_id',$contri_id)
            ->get()
            ->toArray();
        }catch(\Exception $e){
           return $e->getMessage();
        }
        #checking the percentages : if their sum comes out to be zero no book has got percentage
        $per_sum = 0;
        foreach($book_ids_db as $items){
            $per_sum += $items->percentage;
        }
        $book_names = array();#if the no percentage more than 0
        $contri_comment = ''; #contributor comment
        $book_ids_old = array(); #collects all the book ids
        $op_books = array(); #collects items out of print
        $contributors_ids = array(); #collecting contributor id, percentage
        $disabled_books = array(); #collect disabled book
        foreach($book_ids_db as $item){
            $item = get_object_vars($item);
            $creator_name = $item['name'];
            #checks for zero percentage
            if($per_sum == 0){
                $book_names['msg'] =  'No sales generated for following books.';
                $book_names['book'][$item['book_id']]['title']=$item['book_title'];
                $book_names['book'][$item['book_id']]['percentage']=$item['percentage'];
                $contributors1['contri']["user_details"]["name"] = $item['name'];
            }
            #skipping zero percentage
            if($item['percentage'] == 0){continue;}
            #collect out print books
            if( $item['out_of_print'] == 1){$op_books[] = $item['book_id'];}
            #book id
            $book_ids_old[]=$item['book_id'];
            #percentage
            $contributors_ids1[$item['book_id']]['percentage'][]=$item['percentage'];
            $totals_percentage=array_sum($contributors_ids1[$item['book_id']]['percentage']);
            $contributors_ids[$item['book_id']] =  [
            'contri_id'=>$item['contributors_id'],
            'contri_name'=>$item['name'],
            'percentage'=>$totals_percentage,
            ];
            #contributor comment
            $contri_comment = $item['contributor_comment'];
            #contributor comment
            $contri_comment = $item['contributor_comment'];
            if($item['disabled_book']==1){
                $disabled_books[] = $item['book_id'];
            }
        }
        $book_ids_old = array_unique($book_ids_old);
        $disabled_books = array_unique($disabled_books);
        ##OUT OF PRINT
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }
        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $book_ids = array();
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
           foreach($op_books as $key=> $ids){
                if(isset($out_print_array[$ids])){
                    foreach($out_print_array[$ids] as $things){
                        if($things['year']==$selected_year){
                            $op_q = explode(',',$things['quarters']);
                            if(!in_array($selected_quarter,$op_q)){
                                $not_ids[] = $ids;
                            }
                        }
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $book_ids = array_diff($book_ids_old, $not_ids);
        $book_ids = array_unique(array_values(array_diff($book_ids, $disabled_books)));

        #if not empty means there is no percentage found
        if(!empty($book_names)){
            $cal_error = "No percentage given to the following books.";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_names','contri_comment','cal_error','creator_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }
        #redirect if no book is found
        if(empty($book_ids)){
            $cal_error = "No books are found for this contributor. The books are either disabled or out of print.";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','contri_comment','cal_error','creator_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }

        #collect the containers assigned to the contributor
        try{
            $get_containted = DB::table('book_vol_containers')
            ->select('book_vol_containers.book_main_id','book_vol_containers.contained_book_id')
            #books join starts
            ->leftJoin('book_details as main_id', function ($join) {
                $join->on('main_id.id', '=', 'book_vol_containers.book_main_id');
            })
            #books join starts
            ->leftJoin('book_details as sub_id', function ($join) {
                $join->on('sub_id.id', '=', 'book_vol_containers.contained_book_id');
            })
            ->wherein('book_vol_containers.book_main_id',$book_ids)
            #where not in starts
            ->whereNotIn('book_vol_containers.book_main_id',$not_ids)
            ->whereNotIn('book_vol_containers.contained_book_id',$not_ids)
            #where not in ends
            #where not in disabled starts
            ->whereNotIn('book_vol_containers.book_main_id',$disabled_books)
            ->whereNotIn('book_vol_containers.contained_book_id',$disabled_books)
            #where not in disabled ends
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $unsorted_container_list = array();
        foreach($get_containted as $item){
            $item = get_object_vars($item);
            if(in_array($item['book_main_id'],$book_ids) && in_array($item['contained_book_id'],$book_ids)){
                $unsorted_container_list[$item['book_main_id']][] = $item['contained_book_id'];
            }else{
                $unsorted_container_list[$item['book_main_id']][] = '';
            }
        }
        #sort out the array
        $container_list = array();
        foreach($unsorted_container_list as $main => $ids){
            rsort($ids);
            $container_list[$main]=$ids;
        }
        
        ##main percentage : collecting percentage for contributor's portion
        #getting the percentage of the items and contributors
        #fetching the royalty choice, later used for calculating royalty due on contributor
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$book_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $print_pr = array(); #used in the cover price royalty choice
        $royalty_choice = array();
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice'];
            $print_pr[$item['id']] = $item['print_price'];
        }
        
        #Expense
        try{
            $expenses = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
            ->leftJoin('book_expenses', function ($join) {
                $join->on('book_details.id', '=', 'book_expenses.book_id');
            })
            ->whereIn('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
           return $e->getMessage()." Line no assigned_books_arr exp ".$e->getLine();
        }

        #for custom quarter
        $qtrs_val=array();
        if($selected_quarter == 5){
            $selected_q = 'Custom Quarter (Jan - Dec)'; 
            $month1 = date('m', strtotime($week_from));//get the quarter of week from date
            $q1 = ceil($month1/3);
            $month2 = date('m', strtotime($week_to));//get the quarter of week to date
            $q2 = ceil($month2/3);  
            for($qtrs=$q1; $qtrs <= $q2; $qtrs++){//collect the quarter in array
                $qtrs_val[]=$qtrs;
            }
        }
        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            #if not custom quarter
            if($selected_quarter != 5){
                if(($selected_year == $item['year'] || empty($item['year']))){
                    $expense[$item['id']] = $item[$selected_quarter_words];
                }elseif($selected_year != $item['year']){
                    if(!isset($expense[$item['id']])){
                      $expense[$item['id']] = 0;
                    }
                }
            #if custom quarter sum up all the values
            }else{
                if(($selected_year == $item['year'] || empty($item['year']))){
                    $all_qtr_sum =0;
                    foreach($qtrs_val as $qtr){  
                        if($qtr == 1){
                            $all_qtr_sum +=$item['first_quarter'];
                        }
                        if($qtr == 2){
                            $all_qtr_sum +=$item['second_quarter'];
                        }
                        if($qtr == 3){
                            $all_qtr_sum +=$item['third_quarter'];
                        }
                        if($qtr == 4){
                            $all_qtr_sum +=$item['fourth_quarter'];
                        }
                    }
                    $expense[$item['id']] =$all_qtr_sum;
                }elseif($selected_year != $item['year']){
                    if(!isset($expense[$item['id']])){
                      $expense[$item['id']]=0;  
                    }
                }
            }#ends condition for quarter
        }#ends expense foreach

        #digital array
        $digital_info = array(); #digital sales
        $digital_qty = array(); #digital sales
        
        ##amazon
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units')
            ->leftJoin('amazon_sales_reports', function ($join) {
            $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_salsdsdes '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
             $item = get_object_vars($item);
            if($item['amazon_invoice_date'] >= $week_from && $item['amazon_invoice_date']<=$week_to || empty($item['amazon_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['amazon_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['net_units']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##Apple
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['apple_start_date']<=$week_to && $item['apple_start_date']>=$week_from || empty($item['apple_start_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];   
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0;    
            }            
        }

        ##barnes and nobles
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }

        ##comixology
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_comix']<=$week_to && $item['custom_sale_date_comix']>=$week_from || empty($item['custom_sale_date_comix'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['sum_of_quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }           
        }

        ##comixology subscription
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }
        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date_comix_subs']<=$week_to && $item['custom_date_comix_subs']>=$week_from || empty($item['custom_date_comix_subs'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##google
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_google']<=$week_to && $item['custom_sale_date_google']>=$week_from || empty($item['custom_sale_date_google'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##oni press sales
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_oni_con']<=$week_to && $item['custom_sale_date_oni_con']>=$week_from || empty($item['custom_sale_date_oni_con'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['net_sales']*.90;
                $digital_qty[$item['book_id']]['qty'][]=$item['items_sold'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;
                $digital_qty[$item['book_id']]['qty'][]=0;  
            }         
        }

        ##oni shopify sales
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date']<=$week_to && $item['custom_date']>=$week_from || empty($item['custom_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_sales']*.90;
                $digital_qty[$item['book_id']]['qty'][]=$item['net_quantity'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;
                $digital_qty[$item['book_id']]['qty'][]=0;  
            }         
        }

        ##S & S 
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.dollar_net','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
            $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->wherein('book_details.id',$book_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['dollar_net'];
                $digital_qty[$item['book_id']]['qty'][]=$item['unit_net'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }             
        }

        #diamond sales
        $book_ids1 = implode(",", $book_ids);
        try{
            $diamond_sales = DB::select("select book_details.out_of_print,book_details.print_date,book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_from <= '".$week_to."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$week_to."' and book_financials.week_to >= '".$week_from."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }

        ##appending diamond sales
        #query updated on 8-nov-2017
        if(!empty($book_ids)){
            foreach ($diamond_sales as $item) {
                $item = get_object_vars($item);
                #user_info
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['id']= $contributors_ids[$item['id']]['contri_id'];
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['name']= $contributors_ids[$item['id']]['contri_name'];
                ##DIRECT 
                #DIRECT_MARKET_STORES
                if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                    if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                        #unit retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_drct[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_disc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_MARKET_STORES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_drct[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'discount'=>$total_cost_stores_disc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'unit_retail1'=>0,
                        ];
                    }
                 }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_MARKET_STORES'] )){
                    #send main array empty is no sales found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_MARKET_STORES']= 
                    [
                        'store'=>'DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0
                    ];
                }
                
                #DIRECT_SHORTAGE_/_DAMAGE
                if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true))=== 'market' ){
                    if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_dshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_dshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                        ];
                    }  
                }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_SHORTAGE_/_DAMAGE'] )){
                    #send main array empty is no sale found
                     $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_SHORTAGE_/_DAMAGE']= 
                    [
                        'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0
                    ];
                }

                ##NON DIRECT
                #NON-DIRECT_MARKET_STORES
                if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) ==='market'){
                    if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total cost
                        $total_cost_nondir[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_nondir[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                        ];
                    }
                }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_MARKET_STORES'] )){
                    #send main array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>'NON-DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0
                        ];
                }

                #NON-DIRECT_SHORTAGE
                if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                    if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retail
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['unit_retails']);
                        #total cost
                        $total_cost_nonshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_SHORTAGE']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_nonshortage[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                        ];
                    }
                }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_SHORTAGE'] )){
                    #send main array empty is no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_SHORTAGE']= 
                        [
                        'store'=>'NON-DIRECT_SHORTAGE',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0
                        ];
                }

                ##INTERNATIONAL
                #INTERNATIONAL_NON-DIRECT_MARKET_STORES
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                        #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retails
                        $total_cost_intnondir[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['total_cost']);
                        #total cost
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['unit_retails']);
                        $total_cost_stores_d[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] ,
                        'total_cost' => $total_cost_intnondir[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] ,
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_d[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        ];
                    }     
                }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_STORES']= 
                        [
                        'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0

                        ];
                }

                #INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES
                if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                    if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                        #total qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit_retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['unit_retails']);
                        #total cost
                        $total_cost_intermarket[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_intermarket[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                        ];
                    }     
                }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                        [
                        'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1'=>0,
                        'discount'=>0
                        ];
                }

                ##RETURNS
                #DIRECT_RETURNS
                if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'DIRECT_RETURNS'){
                       #qty
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total_cost
                        $total_cost_dirreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']] =  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_RETURNS']= 
                        [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost' => $total_cost_dirreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                            'total_cost1'=>0,
                            'discount' => $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        ];
                    }

                }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset($contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_RETURNS'])){
                    #send array empty if no sale found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['DIRECT_RETURNS']= 
                        [
                            'store'=>'DIRECT_RETURNS',
                            'qty_sold' => 0,
                            'unit_retails' =>0,
                            'total_cost1.1'=>0,
                            'total_cost' =>0,
                            'discount' =>0,
                        ];
                }

                #NON-DIRECT_RETURNS
                if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                    if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                        $total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']][]=  trim($item['qty_sold']);
                        $val_totals_q = array_sum($total_cost_stores_q[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]);
                        #unit retails
                        $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['unit_retails']);
                        #total_cost
                        $total_cost_nondreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['total_cost']);
                        #discount
                        $total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]=  trim($item['desc_percentage']);
                        #main array
                        $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_RETURNS']= 
                        [
                        'store'=>$item['market'],
                        'qty_sold' => $val_totals_q,
                        'unit_retails' => $total_cost_stores[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost' => $total_cost_nondreturn[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']],
                        'total_cost1'=>0,
                        'discount'=>$total_cost_stores_desc[$contributors_ids[$item['id']]['contri_id']][$item['id']][$item['market']]
                        ];
                    }  
                }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_RETURNS'])){
                    #send main array empty if no sale is found
                    $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['NON-DIRECT_RETURNS']= 
                        [
                        'store'=>'NON-DIRECT_RETURNS',
                        'qty_sold' => 0,
                        'unit_retails' =>0,
                        'total_cost' =>0,
                        'total_cost1.1'=>0,
                        'discount' =>0,

                        ];
                }

                #digital sales
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['calculas'][$item['id']]['digital_sales']=array_sum($digital_info[$item['id']]['sales_info']);
                #expenses
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['book_details']['expense'] = $expense;
                #percentage
                $contributors1[$contributors_ids[$item['id']]['contri_id']]['user_details']['percentage'][$item['id']] = 
                    array(
                    'percentage'=> $contributors_ids[$item['id']]['percentage']
                    );

            } # main array foreach ends
        } # ends condition
        $total_profit = array(); #profit : gross sales - expense
        $qtrs_val=array(); #collecting the quarers if 5th quarter selected
        #collecting sales and quarter values
        if($selected_quarter == 5){
            //get the quarter of week from date
            $month1 = date('m', strtotime($week_from));
            $q1 = ceil($month1/3);
            //get the quarter of week to date
            $month2 = date('m', strtotime($week_to));
            $q2 = ceil($month2/3);  
            //collect the quarter in array
            for($qtrs=$q1; $qtrs <= $q2; $qtrs++){
                $qtrs_val[]=$qtrs;
            }
        }

        #when the out_of_print array is one and no sales are found
        if(empty($contributors1)){
            $contributors1 = $contributors_empty;
            $pdf = PDF::loadView('pdf/contributor_containers_report',compact('selected_quarter','selected_year','week_from','week_to','contributors1','book_names','contri_comment'));

            return $pdf->stream(); //to view the pdf
            die();
        }
        
        #calculating the values
        $book_finals = array(); #final books which are to be used;
        $book_reports = array();
        foreach($contributors1 as $contributordet){
            foreach($contributordet['calculas'] as $book_no1=>$calc){
               #direct
                $net_direct_revenue =  ($calc['DIRECT_MARKET_STORES']['total_cost'])+( $calc['DIRECT_SHORTAGE_/_DAMAGE']['total_cost'])+( $calc['DIRECT_RETURNS']['total_cost']);
                #non direct
                $net_non_dir_revenue = ($calc['NON-DIRECT_MARKET_STORES']['total_cost'])+( $calc['NON-DIRECT_SHORTAGE']['total_cost']);
                #returns
                $return_revenue =  $calc['NON-DIRECT_RETURNS']['unit_retails'] * $calc['NON-DIRECT_RETURNS']['qty_sold'] * 3/100 ;
                $net_revenue = $calc['NON-DIRECT_RETURNS']['unit_retails']*(1-($calc['NON-DIRECT_RETURNS']['discount']/100)) * $calc['NON-DIRECT_RETURNS']['qty_sold'] + $return_revenue;
                #international
                $net_internatioal_revenue = $calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['discount']/100))-($calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['unit_retails']*$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']*(2.5/100))+($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['unit_retails']*(1-($calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['discount']/100))*$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']);
                #totals
                $gross_sales = $net_revenue+$net_non_dir_revenue+$net_direct_revenue+$net_internatioal_revenue+$calc['digital_sales'];
                #Qty
                $total_qty = $calc['DIRECT_MARKET_STORES']['qty_sold']+$calc['DIRECT_SHORTAGE_/_DAMAGE']['qty_sold']+$calc['NON-DIRECT_SHORTAGE']['qty_sold']+$calc['NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_STORES']['qty_sold']+$calc['NON-DIRECT_RETURNS']['qty_sold']+$calc['DIRECT_RETURNS']['qty_sold']+$calc['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']['qty_sold']+array_sum($digital_qty[$book_no1]['qty']);
                #expense
                $sum = $expense[$book_no1];
                ##checking the royalty choice 
                #if choice is 1 i.e. net
                if($royalty_choice[$book_no1] == 1 ||$royalty_choice[$book_no1] == NULL ){
                    #profit
                    $total_profit = $gross_sales-$sum;
                    #contributor's share of portion
                    #collect contributor's portion by collecting total profit , hence diving it by total percentage
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final2 = $total_profit *$divide_by_val/100;
                }

                #if choice is 2 i.e. gross
                if($royalty_choice[$book_no1] ==2){
                    #profit
                    $total_profit = $gross_sales;
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final2 = $total_profit *$divide_by_val/100;
                }  

                #if choice is 3 i.e. cover price
                if($royalty_choice[$book_no1] == 3){
                    #profit
                    $total_profit = $gross_sales-$sum;
                    #contributor's share of portion
                    #collect contributor's portion by collecting total profit , hence diving it by total percentage
                    $divide_by_val = array_sum($percentage_Array[$book_no1]);
                    $total_profit_final2 = $print_pr[$book_no1] *  $total_qty *$divide_by_val/100;
                }

                //comment by nishant 2 jan 2018 start 
                // if($total_profit_final2 == 0){
                //     $book_zero_total['msg'] =  'No sales generated.';
                //     $book_zero_total['book'][$item['id']]['title']='';
                //     $book_zero_total['book'][$item['id']]['percentage']='0';
                //     continue;
                // }
                //comment by nishant 2 jan 2018 end
                $book_finals[] = $book_no1;
                #profit & sales : collect contributor's portion by collecting the 50% of total profit , hence diving it by 2
                $book_reports['book_report'][] = array('book_id'=>$book_no1,'gross_sales'=>$gross_sales,'origital_total'=>$total_profit,'total_profit'=>$total_profit_final2);
            }#calculas foreach
        }#main
        if(empty($book_reports) && isset($book_zero_total)){
            $cal_error = "No sales found for the books.";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_zero_total','creator_name','cal_error'));
            return $pdf->stream(); //to view the pdf
            die();
        }
        #collect selected quarter advance : all advances added to the book in the selected qtr
        try{
            $advance = DB::table('assign_contributors')
            ->select('assign_contributors.contributor_id','assign_contributors.book_id','book_advances.amount','book_advances.year','book_advances.quarter','assign_contributors.percentage','book_details.book_title','book_advances.id as a_id','assign_contributors.id as assign_id')
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('book_details', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->where('assign_contributors.contributor_id',$contri_id)
            ->wherein('assign_contributors.book_id',$book_finals)
            ->where(function ($query) {
                $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })
            #books join starts
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            #books join ends
            ->orderBy('book_details.book_title','asc')->get()->toarray();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #amount and percentage
        $amount_current_quarter = array(); #advance
        $contributor_percentage = array(); #percentage
        $book_title_db = array(); #book title
        foreach($advance as $item){
            $item = get_object_vars($item);
            #percentage is to be doubled
            $contributor_percentage[$item['book_id']][$item['assign_id']]=$item['percentage'];
            $book_title_db[$item['book_id']] = $item['book_title'];
            #collect the advances based on the quarter selected
            if($selected_quarter != 5 ){
                if($item['quarter']==$selected_quarter && $item['year'] == $selected_year){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }else{
                #custom quarter dates
                $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
                $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
                if(\Session::get('week_from') == ""){
                    $custom_week_from = $default_first_date; 
                }else{
                   $custom_week_from = \Session::get('week_from');
                }  
                if(\Session::get('week_to') == ""){
                    $custom_week_to = $default_last_date;
                }else{
                   $custom_week_to = \Session::get('week_to');
                } 
                $custom_quarter_from = ceil(date('m', strtotime($custom_week_from))/3);
                $custom_quarter_to = ceil(date('m', strtotime($custom_week_to))/3);
                #custom quarter amount
                if($item['year'] == $selected_year && ( $item['quarter'] >= $custom_quarter_from && $item['quarter'] <= $custom_quarter_to )){
                    $amount_current_quarter[$item['book_id']][] =$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }
        }
        #prev bal.end of qtr
        $balance_end_q_prev = $this->varq[$contri_id];
        #royalty due
        $royalty_due = array();
        #totla profit/total sales
        $total_profit_sales = array();
        $original_profit_sales = array();
        foreach($book_reports as  $book_report){
            foreach($book_report as $book_array){
                $total_profit_sales[$book_array['book_id']] = $book_array['total_profit'];
                $original_profit_sales[$book_array['book_id']] = $book_array['origital_total'];
            }
        }
        #Royalty Due = Contributor’s portion (total profit's 50%) - Total Advance (for the selected book) 
        #Contributor’s amount = Royalty due * Royalty Percentage (%)
        $balance_end_quarter = array();
        $book_details_Arr  = array();
        foreach($amount_current_quarter as $book_id => $amount_values){
            #contributor's amount 
            $full_per = array_sum($percentage_Array[$book_id]);
            $manage_pay = array_sum($contributor_percentage[$book_id]);
            #title
            $book_details_Arr[$book_id]['book_title'] = $book_title_db[$book_id];
            #total sales
            $book_details_Arr[$book_id]['total_sales'] = $original_profit_sales[$book_id];
            #creators portion
            $book_details_Arr[$book_id]['contri_part'] = $total_profit_sales[$book_id];
            #royalty due : profit share
            $book_details_Arr[$book_id]['royalty_due'] = $total_profit_sales[$book_id]+array_sum($amount_values);
            if($full_per == 0){
                $book_details_Arr[$book_id]['contributor_amount'] = $book_details_Arr[$book_id]['royalty_due'] * 0;
            }else{
                $book_details_Arr[$book_id]['contributor_amount'] = $book_details_Arr[$book_id]['royalty_due'] * $manage_pay/$full_per;
            }
            #amount advance 
            $book_details_Arr[$book_id]['amount'][] = array_sum($amount_values);
            #balance end of quarter
            if(isset($balance_end_q_prev[$book_id])){
                if($balance_end_q_prev[$book_id]>0){
                    $prev_qty = 0;
                }else{
                    $prev_qty = $balance_end_q_prev[$book_id];
                }
            }else{
                $prev_qty = 0;
            }
            $book_details_Arr[$book_id]['b_e_q'] = $book_details_Arr[$book_id]['contributor_amount']/*+$prev_qty*/;
            #previous quarter balance
            $book_details_Arr[$book_id]['b_e_q_prev'] = $prev_qty;
            #for summing the total
            $book_details_Arr[$book_id]['b_e_q_total'] = $book_details_Arr[$book_id]['contributor_amount']+$prev_qty;
        }
        #creation of final array with container and contained items
        $final_array = array();
        #reset container_list and remove books who have zero total profit
        $container_new = array();
        foreach($container_list as $main_id => $sub_ids){
            foreach($sub_ids as $ids){
                if(in_array($main_id,$book_finals) && in_array($ids,$book_finals)){
                    $container_new[$main_id] = $sub_ids;
                }
            }
        }
        #forcollecting the sum of its contained items
        $sum_value = array();
        foreach($container_new as $main_id => $data){
            foreach($data as $ids){
                if(!empty($ids) ){
                    if(isset($book_details_Arr[$ids])){
                        $sum_value[$main_id][] = $book_details_Arr[$ids]['b_e_q'];
                    }
                }else{
                    $sum_value[$main_id][] = 0;
                }
            }
        }
        foreach($book_details_Arr as $b_ids => $value){
            if(!empty($container_new)){
                $contained_empty = array();
                foreach($container_new as $main_id => $data){
                    if(in_array($b_ids, $data) && !empty($data)){
                        $sum_array[$main_id][] = $book_details_Arr[$b_ids]['b_e_q'];
                        #contained title
                        $book_name = str_replace("'","",$book_details_Arr[$b_ids]['book_title']);
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['book_name']=$book_details_Arr[$b_ids]['book_title'];
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['total_sales']=$book_details_Arr[$b_ids]['total_sales'];
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['contri_part']=$book_details_Arr[$b_ids]['contri_part'];
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['royalty_due']=$book_details_Arr[$b_ids]['royalty_due'];
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['b_e_q']=$book_details_Arr[$b_ids]['b_e_q'];
                        $final_array['container_collection'][$main_id]['contained_array'][$b_ids]['advance'] = array_sum($amount_current_quarter[$b_ids]);
                    }
                    if(empty($data[0])){
                        #collection of containers with no contained items
                        $final_array['simple_array'][$main_id]['book_title']=$book_details_Arr[$main_id]['book_title'];
                        $final_array['simple_array'][$main_id]['total_sales']=$book_details_Arr[$main_id]['total_sales'];
                        $final_array['simple_array'][$main_id]['contri_part']=$book_details_Arr[$main_id]['contri_part'];
                        $final_array['simple_array'][$main_id]['royalty_due']=$book_details_Arr[$main_id]['royalty_due'];
                        $final_array['simple_array'][$main_id]['b_e_q']=$book_details_Arr[$main_id]['b_e_q'];
                        $contained_empty[] = $main_id;
                    }
                }
                #check if there is a container
                if(array_key_exists($b_ids, $container_new)){
                    #forcollecting the sum of its contained items
                    $sum_bal = 0;
                    foreach($sum_value[$b_ids] as $values){
                        $sum_bal += $values;
                    }
                    #make the main array
                    if(!empty($container_new[$b_ids][0])){
                        $final_array['container_collection'][$b_ids]['main_array']['main_b_e_q']=$book_details_Arr[$b_ids]['b_e_q'];
                        $final_array['container_collection'][$b_ids]['main_array']['b_e_q_final']=$book_details_Arr[$b_ids]['b_e_q']+$sum_bal;
                        $final_array['container_collection'][$b_ids]['main_array']['main_title']=$book_details_Arr[$b_ids]['book_title'];
                    }
                }
                #created an array of container plus contained items
                $container_contained  = array();
                foreach($container_new as $main_id => $data){
                    $container_contained[] = $main_id;
                    foreach($data as $ids){
                        $container_contained[] = $ids;
                    }
                }

                if(!in_array($b_ids,  $container_contained)){
                    $final_array['simple_array'][$b_ids]['book_title']=$book_details_Arr[$b_ids]['book_title'];
                    $final_array['simple_array'][$b_ids]['total_sales']=$book_details_Arr[$b_ids]['total_sales'];
                    $final_array['simple_array'][$b_ids]['contri_part']=$book_details_Arr[$b_ids]['contri_part'];
                    $final_array['simple_array'][$b_ids]['royalty_due']=$book_details_Arr[$b_ids]['royalty_due'];
                    $final_array['simple_array'][$b_ids]['b_e_q']=$book_details_Arr[$b_ids]['b_e_q'];
                    $final_array['simple_array'][$b_ids]['b_e_q_prev']=$book_details_Arr[$b_ids]['b_e_q_prev'];
                }
            }else{
                #if there is no container items
                $final_array['simple_array'][$b_ids]['book_title']=$book_details_Arr[$b_ids]['book_title'];
                $final_array['simple_array'][$b_ids]['total_sales']=$book_details_Arr[$b_ids]['total_sales'];
                $final_array['simple_array'][$b_ids]['contri_part']=$book_details_Arr[$b_ids]['contri_part'];
                $final_array['simple_array'][$b_ids]['royalty_due']=$book_details_Arr[$b_ids]['royalty_due'];
                $final_array['simple_array'][$b_ids]['b_e_q']=$book_details_Arr[$b_ids]['b_e_q'];
                $final_array['simple_array'][$b_ids]['b_e_q_prev']=$book_details_Arr[$b_ids]['b_e_q_prev'];
            }
        }
        #previous quarter container value
        if(isset($this->container_prev[$contri_id])){
            $bal_prev_container = $this->container_prev[$contri_id];
        }else{
            $bal_prev_container = '';
        }
        $pdf = PDF::loadView('pdf/contributor_containers_report',compact('selected_quarter','selected_year','week_from','week_to','contributors1','final_array','sum_bal','bal_prev_container','bal_prev_simple','contri_comment'));
        return $pdf->stream(); //to view the pdf
        die();
    } #container_contributor ends here

/***
Advance Collection : collect advances of one particular book
***/

    public function advance_collection(Request $request){
        #current date
        $current = floor((date('n') - 1) / 3);
        #get current quarter
        $q = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        #session : quarter
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #contributor id
        if(isset($_GET['book_id'])){
            $book_id = $_GET['book_id'];
        }
        #getbook title
        try{
            $book_title = DB::table("book_details")->where("id",$book_id)->value("book_title");
        }catch(\Exception $e){
            return $e->getMessage();
        }
        #logged in user id #dashboard : Added by when redirected from the contributor's dashboard
        if(isset($_GET['added_by'])){ #dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #get the advances
        try{
            $get_adv = DB::table("book_advances")
                       ->select("id","book_title","amount","quarter","year","updated_at")
                       ->where("book_id",$book_id)
                       ->where("added_by",$id)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        #creating array
        $advance_excel = array();#all excel advance
        $current_adv = array();#current advance 
        $all_advances = array(); #collect all the advances
        #setting up headings
        $advance_excel=array(
            array('adv'=>'BOOK TITLE','date'=>$book_title,'qtr'=>'','year'=>''),
            array('adv'=>'CURRENT QUARTER','date'=>$selected_quarter." YEAR : ".$selected_year,'qtr'=>'',"year"=>""),
            array('adv'=>'Advance','date'=>'Date','qtr'=>'Quarter','year'=>'')
        );
        #carrying all the advances
        $all_advances=array(
            array('adv'=>'', 'date'=>'','qtr'=>'','year'=>''),
            array('adv'=>'ALL THE ADVANCE', 'date'=>'','qtr'=>'','year'=>''),
            array('adv'=>'Advance','date'=>'Date','qtr'=>'Quarter','year'=>'Year'),
            );
        foreach($get_adv as $item){
            if($item->year == $selected_year && $item->quarter == $selected_quarter){
                $current_adv[$item->id]['adv'] = abs($item->amount);
                $current_adv[$item->id]['date'] = date('M d,Y',strtotime($item->updated_at));
                $current_adv[$item->id]['qtr'] = $item->quarter;
                $current_adv[$item->id]['year'] = $item->year;
            }
            $all_advances[$item->id]['adv'] = abs($item->amount);
            $all_advances[$item->id]['date'] = date('M d,Y',strtotime($item->updated_at));
            $all_advances[$item->id]['qtr'] = $item->quarter;
            $all_advances[$item->id]['year'] = $item->year;
        }
        ##if the arrays are empty
        if(empty($current_adv)){
            $current_adv[]=array('adv'=>'No Advances found in the selected quarter.', 'date'=>'','qtr'=>'','year'=>'');
        }
        if(!isset($all_advances[3])){
            $all_advances[4]=array('adv'=>'No Advances found.', 'date'=>'','qtr'=>'','year'=>'');
        }
        #collecting data in one array
        foreach($current_adv as $id => $data){
            $advance_excel[]=['adv'=>$data['adv'], 'date'=>$data['date'],'qtr'=>$data['qtr'],'year'=>$data['year']];
        }
        foreach($all_advances as $id => $data){
            $advance_excel[]=['adv'=>$data['adv'], 'date'=>$data['date'],'qtr'=>$data['qtr'],'year'=>$data['year']];
        }
        #setting quarter values
        if($selected_quarter == '1'){
            $quarter = '1st Qtr';
        }else if($selected_quarter == '2'){
            $quarter = '2nd Qtr';
        }else if($selected_quarter == '3'){
            $quarter = '3rd Qtr';
        }else if($selected_quarter == '4'){
            $quarter = '4th Qtr';
        }else if($selected_quarter == '5'){
            $quarter = 'Custom Qtr';
        }
        #printing excel
        try{
            return Excel::create('Advance_report_('.$quarter.')'.date("m/d/Y"), function($excel) use ($advance_excel){
                $excel->setTitle('Advances');
                $excel->setDescription('Book Advances');
                $excel->getDefaultStyle()->getAlignment()->setWrapText(true);
                $excel->sheet('sheet', function($sheet) use ($advance_excel){
                    $sheet->fromArray($advance_excel, null, 'A1', false, false);
                    #Align starts
                    $sheet->getDefaultStyle()
                    ->getAlignment()
                    ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                });
            })->download('xls');
        }catch(\Exception $e){
            return $e->getMessage()." Error line no ".$e->getLine();
        }
    }#ends advance_collection function

/***
Advance Collection : Full advance report
***/

    public function all_adv_report(Request $request){
        #current date
        $current = floor((date('n') - 1) / 3);
        #get current quarter
        $q = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        #session : quarter
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #logged in user id #dashboard : Added by when redirected from the contributor's dashboard
        if(isset($_GET['added_by'])){ #dashboard
           $id= $_GET['added_by'];
        }else{
           $id = Auth::user()->id;
        }
        #get book id
        try{
            $book_id = DB::table('book_details')
            ->where('added_by',$id)
            ->where(function ($query) {
                $query->where('merged_book','!=',1)
                    ->orWhereNull('merged_book');
            })
            ->pluck('id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage(); 
        }
        #get the advances
        try{
            $get_adv = DB::table("book_advances")
                       ->select("id","book_id","book_title","amount","quarter","year","updated_at")
                       ->wherein("book_id",$book_id)
                       ->where("added_by",$id)
                       ->orderBy("book_title","asc")
                       ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        #arrays
        $main_Array = array();#main excel array
        $adv_array = array(); #advance array collected as per book
        $all_advance = array();
        #setting up headings 
        $main_Array[] = ['Book Title','Advance','Quarter','Year','Updated/Added on'];
        foreach($get_adv as $item){
            $adv_array[$item->book_id][]=[
            "id"=>$item->id,
            "name"=>$item->book_title,
            "amount"=>$item->amount,
            "quarter"=>$item->quarter,
            "year"=>$item->year,
            "date"=>date('M d,Y',strtotime($item->updated_at))
            ];
        }
        foreach($adv_array as $book_id => $data){
            foreach($data as $count => $item){
                if(abs($adv_array[$book_id][$count]['amount']) == ""){
                    $amount = 0;
                }else{
                    $amount = abs($adv_array[$book_id][$count]['amount']);
                }
                if($count==0){
                    $main_Array[$adv_array[$book_id][$count]['id']]=[
                    "name"=>$adv_array[$book_id][$count]['name'],
                    "amount"=>$amount,
                    "quarter"=>$adv_array[$book_id][$count]['quarter'],
                    "year"=>$adv_array[$book_id][$count]['year'],
                    "date"=>$adv_array[$book_id][$count]['date']
                    ];
                }else{
                    $main_Array[$adv_array[$book_id][$count]['id']]=[
                    "name"=>'',
                    "amount"=>$amount,
                    "quarter"=>$adv_array[$book_id][$count]['quarter'],
                    "year"=>$adv_array[$book_id][$count]['year'],
                    "date"=>$adv_array[$book_id][$count]['date']
                    ];
                }
            }
        }

        #printing excel
        try{
            return Excel::create('All_Advance_report_'.date("m/d/Y"), function($excel) use ($main_Array){
                $excel->setTitle('Advances');
                $excel->setDescription('Book Advances');
                $excel->getDefaultStyle()->getAlignment()->setWrapText(true);
                $excel->sheet('sheet', function($sheet) use ($main_Array){
                    $sheet->fromArray($main_Array, null, 'A1', true, false);
                    #Align starts
                    $sheet->getDefaultStyle()
                    ->getAlignment()
                    ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                });
            })->download('xls');
        }catch(\Exception $e){
            return $e->getMessage()." Error line no ".$e->getLine();
        }
    }#ends all_adv_report function

/**
All the books of a contributor for contributor login
**/

    public function all_container_items(Request $request){
        #redirection if not correct user
        if(\Session::get('login_type') != 2){
            return redirect()->route('home');
        }
        #previous quarter
        $this->book_sales_prev($request);
        $previous_quarter = $this->book_s;
        #logged in user's id  i.e. when accessed through the contributor's dashboard
        if(isset($_GET['added_by'])){
            $id = $_GET['added_by'];
        }
        #contributor id
        $c_id = Auth::user()->id;
        #current date
        $current = floor((date('n') - 1) / 3);
        $year = date('y');
        $quarters = array();
        $q = "";
        $mysql_qty = "";
        for($i = 0; $i < 5; $i++){
            $q = (($current+$i)%4) + 1;
        }
        $mysql_qty = $q;
        #session
        if(\Session::get('selected_quarter') == ""){
            $selected_quarter = $q;
        }else{
            $selected_quarter = \Session::get('selected_quarter');
        }
        $mysql_qty = $selected_quarter;
        #current year
        $current_year= date('Y');
        if(\Session::get('selected_year') == ""){
            $selected_year = $current_year; 
        }else{
            $selected_year = \Session::get('selected_year');
        }
        #dates
        $first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($selected_quarter * 3) - 2) . '-1'));
        $last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($selected_quarter * 3)) . '-1'));
        #session dates
        if(\Session::get('week_from') == ""){
            $week_from = $first_date; 
        }else{
           $week_from = \Session::get('week_from');
        }  
        if(\Session::get('week_to') == ""){
            $week_to = $last_date;
        }else{
           $week_to = \Session::get('week_to');
        } 
        ##get all the books of the contributor
        #get the books of the contributor
        try{
            $books = DB::table("book_details")
            ->select("book_details.id as book_id","book_details.disabled_book")
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('contributor_roles', function ($join) {
            $join->on('assign_contributors.role_id', '=', 'contributor_roles.id');
            })
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })              
            ->where('assign_contributors.contributor_id', $c_id)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage()." Line no". $e->getLine() ;
        }
        $book_ids = array();
        $disabled_books = array();
        foreach($books as $data){
            $book_ids[] = $data->book_id; 
            if($data->disabled_book == 1){
                $disabled_books[] = $data->book_id;
            }
        }
        $disabled_books = array_unique($disabled_books);

        ##GET the contained & containers of the book
        try{
            $check_containees = DB::table('book_vol_containers')
            #contained item's name
            ->leftJoin('book_details', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'book_details.id');
            })
            #contributor check
            ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'assign_contributors.book_id');
            })
            ->wherein('book_main_id',$book_ids)
            ->where('assign_contributors.contributor_id',$c_id)
            ->pluck('contained_book_id');
        }catch(\Exception $e){
           return $e->getMessage();
        }
        #only the contained items
        $all_ids_old = json_decode(json_encode($check_containees));
        ##SIMPLE ITEMS
        #the simple and container items only
        $sim_containers = array_unique(array_diff($book_ids, $all_ids_old));
        try{
            $only_containers = DB::table('book_vol_containers')
            ->whereIn('book_vol_containers.book_main_id',$sim_containers)
            ->pluck('book_vol_containers.book_main_id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $only_containers = array_values(array_unique($only_containers));
        $check_containees = json_decode(json_encode($check_containees));
        ##COLLECTING ALL BOOK IDS
        if(!empty($check_containees)){
            $all_ids_old = array_merge($book_ids, $all_ids_old); 
        }else{
            $all_ids_old = $book_ids;
        }

        ####FILTER FOR THE BOOKS HERE#####
        try{
            $op_books = DB::table('book_details')->whereIn('id',$all_ids_old)->where('out_of_print',1)->pluck('id')->toArray();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        try{
            $op_data = DB::table('out_of_print')->select('out_of_print.book_id','out_of_print.year','out_of_print.quarters','out_of_print.id as op_id')->wherein('out_of_print.book_id',$op_books)->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $out_print_array = array();
        foreach($op_data as $item){
            if(!empty($item->op_id)){
            $out_print_array [$item->book_id][$item->op_id] = ['year'=>$item->year,'quarters'=>$item->quarters];
            }
        }
        #filter the out of print books #prabhdeep_con3 and change book_ids to all_books
        $not_ids = array(); #where ids should be from these
        if(!empty($op_books)){
           foreach($op_books as $key=> $ids){
                if(isset($out_print_array[$ids])){
                    foreach($out_print_array[$ids] as $things){
                        if($things['year']==$selected_year){
                            $op_q = explode(',',$things['quarters']);
                            if(!in_array($selected_quarter,$op_q)){
                                $not_ids[] = $ids;
                            }
                        }
                    }
                }else{
                    $not_ids[] = $ids;
                }
            }
        }
        if(!empty($not_ids)){
            $not_ids = array_unique($not_ids);
        }
        $all_ids_old = array_diff($all_ids_old, $not_ids);

        ##DISABLED BOOKS 

        $all_ids = array_unique(array_values(array_diff($all_ids_old, $disabled_books)));
        
        if(empty($all_ids)){ #prabhdeephere
            $cal_error = "No Books found. Book is either marked disabled or out of print.";
            $report_name= "Individual Sale report";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_names','contri_comment','cal_error','report_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }

        $prevent_ids = array_merge($not_ids, $disabled_books);
        $prevent_ids = array_unique($prevent_ids);

        ##GETIING THE DATA OF SIMPLE BOOK
        $simple_items = array_unique(array_diff($sim_containers,$only_containers));  
        $simple_items = array_diff($simple_items, $not_ids); 
        $simple_items = array_unique(array_values(array_diff($simple_items, $disabled_books)));

        if(empty($simple_items)){
            $cal_error = "No Books found. Books are either marked disabled or out of print.";
            $report_name= "Individual Sale report";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_names','contri_comment','cal_error','report_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }
        try{
            $simple_data = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_details.isbn_code','book_details.isbn_code2','book_details.isbn_code3','book_details.print_price','book_details.digital_price','book_details.container','book_details.diamond_item_code','book_details.asin_code','book_details.qb_classes','book_details.comixology_code','book_details.upc','book_details.itune_code','book_details.out_of_print','book_details.print_date','book_details.google_gg_key')
            ->wherein('book_details.id',$simple_items)
            ->where(function ($query) {
                $query->where('book_details.merged_book','!=',1)
                    ->orWhereNull('book_details.merged_book');
            })
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $simple_data = json_decode(json_encode($simple_data),true);
        $book_data = array();

        foreach($simple_data as $data){
            $book_data['simple'][$data['id']]['title'] = $data['book_title'];
            $book_data['simple'][$data['id']]['isbn_code']=$data['isbn_code'];
            $book_data['simple'][$data['id']]['isbn_code3']=$data['isbn_code3'];
            $book_data['simple'][$data['id']]['isbn_code2']=$data['isbn_code2'];
            if(empty($data['print_price'])){
                $book_data['simple'][$data['id']]['print_price']=0;
            }else{
                $book_data['simple'][$data['id']]['print_price']=$data['print_price'];
            }
            if(empty($data['digital_price'])){
                $book_data['simple'][$data['id']]['digital_price']=0;
            }else{
                $book_data['simple'][$data['id']]['digital_price']=$data['digital_price'];
            }
            $book_data['simple'][$data['id']]['diamond_item_code']=$data['diamond_item_code'];
            $book_data['simple'][$data['id']]['asin_code']=$data['asin_code'];
            $book_data['simple'][$data['id']]['qb_classes']=$data['qb_classes'];
            $book_data['simple'][$data['id']]['comixology_code']=$data['comixology_code'];
            $book_data['simple'][$data['id']]['upc']=$data['upc'];
            $book_data['simple'][$data['id']]['itune_code']=$data['itune_code'];
            $book_data['simple'][$data['id']]['google_gg_key']=$data['google_gg_key'];
        }
        
        ####FILTER FOR THE BOOKS ENDS#####

        ##get the book details of the contained plus container items
        try{
            $book_details = DB::table('book_details')
            ->select('book_details.id','book_details.book_title','book_details.isbn_code','book_details.isbn_code2','book_details.isbn_code3','book_details.print_price','book_details.digital_price','book_details.container','book_details.diamond_item_code','book_details.asin_code','book_details.qb_classes','book_details.comixology_code','book_details.upc','book_details.itune_code','book_details.out_of_print','book_details.print_date','book_details.google_gg_key','book_vol_containers.contained_book_id','sub_book_data.book_title as sub_title','sub_book_data.merged_book','sub_book_data.out_of_print as sub_print_check')
            #contained item's id
            ->leftJoin('book_vol_containers', function ($join) {
                $join->on('book_details.id', '=', 'book_vol_containers.book_main_id');
            })
            #contained item's name
            ->leftJoin('book_details as sub_book_data', function ($join) {
                $join->on('book_vol_containers.contained_book_id', '=', 'sub_book_data.id');
            })
            ->wherein('book_details.id',$all_ids)
            ->wherein('book_vol_containers.book_main_id',$all_ids)
            ->wherein('book_vol_containers.contained_book_id',$check_containees)
            ->where(function ($query) {
                $query->where('sub_book_data.merged_book','!=',1)
                    ->orWhereNull('sub_book_data.merged_book');
            })
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $book_details = json_decode(json_encode($book_details),true);

        if(empty($book_data)){ #means no simple item exists 
            $book_data = array();
        }


        if(empty($book_details) && empty($book_data)){ #means the container is disabled or out of print/
            $cal_error = "Cannot display report. The main container item is disabled or out of print.";
            $report_name= "Container repor.";
            $pdf = PDF::loadView('pdf/empty_report',compact('selected_quarter','selected_year','week_from','week_to','book_names','contri_comment','cal_error','report_name'));
            return $pdf->stream(); //to view the pdf
            die();
        }
        foreach($book_details as $data){
            $book_data[$data['id']]['title'] = $data['book_title'];
            $book_data[$data['id']]['isbn_code']=$data['isbn_code'];
            $book_data[$data['id']]['isbn_code3']=$data['isbn_code3'];
            $book_data[$data['id']]['isbn_code2']=$data['isbn_code2'];
            if(empty($data['print_price'])){
                $book_data[$data['id']]['print_price']=0;
            }else{
                $book_data[$data['id']]['print_price']=$data['print_price'];
            }
            if(empty($data['digital_price'])){
                $book_data[$data['id']]['digital_price']=0;
            }else{
                $book_data[$data['id']]['digital_price']=$data['digital_price'];
            }
            $book_data[$data['id']]['diamond_item_code']=$data['diamond_item_code'];
            $book_data[$data['id']]['asin_code']=$data['asin_code'];
            $book_data[$data['id']]['qb_classes']=$data['qb_classes'];
            $book_data[$data['id']]['comixology_code']=$data['comixology_code'];
            $book_data[$data['id']]['upc']=$data['upc'];
            $book_data[$data['id']]['itune_code']=$data['itune_code'];
            $book_data[$data['id']]['google_gg_key']=$data['google_gg_key'];
            if($data['container']==1 && !empty($data['contained_book_id']) && !in_array($data['contained_book_id'], $prevent_ids)){
                $book_data[$data['id']]['sub_title'][$data['contained_book_id']]['container_name'] = $data['sub_title'];
                $book_data[$data['id']]['sub_title'][$data['contained_book_id']]['cont_outprint'] = $data['sub_print_check'];
            }
        }

        ##GET PERCENTAGE
        try{
            $percentage = DB::table('book_details')
            ->select('book_details.id','assign_contributors.percentage','book_details.book_choice','book_details.print_price','assign_contributors.contributor_id as c_id')
            #count and stuff
            ->leftJoin('assign_contributors', function ($join) {
            $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            #to prevent merged books
            ->leftJoin('users', function ($join) {
            $join->on('assign_contributors.contributor_id', '=', 'users.id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->wherein('book_details.id',$all_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $print_price = array();
        $royalty_choice = array();
        $percentage_Array = array();
        foreach($percentage as $item){
            $item = get_object_vars($item);
            $percentage_Array[$item['id']][]=$item['percentage'];
            $royalty_choice[$item['id']] = $item['book_choice']; 
            $print_price[$item['id']] = $item['print_price'];
        }

        ##EXPENSE
        try{
            $expenses = DB::table('book_details')
                ->select('book_details.id','book_details.book_title','book_expenses.first_quarter','book_expenses.second_quarter','book_expenses.third_quarter','book_expenses.fourth_quarter','book_expenses.year')
                ->leftJoin('book_expenses', function ($join) {
                    $join->on('book_details.id', '=', 'book_expenses.book_id');
                })
                ->wherein('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
           return $e->getMessage()." Line no assigned_books_arr ".$e->getLine();
        }
        $expense = array();
        foreach($expenses as $item){
            $item = get_object_vars($item);
            if($item['year'] == $selected_year || $item['year']==''){
                $expense[$item['id']] = ['book_id'=>$item['id'],
                'book_title'=> $item['book_title'],
                'first_quarter'=> $item['first_quarter'],
                'second_quarter'=>  $item['second_quarter'],
                'third_quarter'=> $item['third_quarter'],
                'fourth_quarter'=> $item['fourth_quarter'],
                'year'=>  $item['year']
                ];    
            }
            if($item['year'] != $selected_year || $item['year']==''){
                if(!isset($expense[$item['id']])){
                    $expense[$item['id']] = ['book_id'=>$item['id'],
                    'book_title'=> $item['book_title'],
                    'first_quarter'=> 0,
                    'second_quarter'=> 0,
                    'third_quarter'=> 0,
                    'fourth_quarter'=> 0,
                    'year'=>  ''
                    ];  
                }
            }
        }

        ##GET The contributors
        try{
            $get_contributors  = DB::table('book_details')
            ->select('assign_contributors.contributor_id','users.name','assign_contributors.percentage','book_details.id as book_id')
            ->where('book_details.added_by',$id)
            ->leftJoin('assign_contributors', function ($join) {
                $join->on('book_details.id', '=', 'assign_contributors.book_id');
            })
            ->leftJoin('users', function ($join) {
                $join->on('users.id', '=', 'assign_contributors.contributor_id');
            })
            ->where(function ($query) {
                $query->where('users.merged_contributor','!=',1)
                    ->orWhereNull('users.merged_contributor');
            })
            ->where('users.id',$c_id)
            ->wherein('book_details.id',$all_ids)
            ->get();
        }catch(\Exception $e){
            return $e->getMessage();
        }
        #sending the creator's name if accessed through the contri's login
        try{
            $creator_name = DB::table('users')->where('id',$c_id)->value('name');
        }catch(\Exception $e){
            return $e->getMessage();
        }
        $get_contributors = json_decode(json_encode($get_contributors),true);

        #collecting contributor ids
        $contri_info = array();
        foreach($get_contributors as $value){
            $contri_info[$value['book_id']][$value['contributor_id']]['name']=$value['name'];
            $contri_info[$value['book_id']][$value['contributor_id']]['percentage'][]=$value['percentage'];
            $contri_ids[] = $value['contributor_id'];
        }
        $contri_ids = array_unique($contri_ids);

        ##########SALES##########
        ##amazon sales
        try{
            $amazon_sales = DB::Table('book_details')
            ->select('book_details.id as book_id'  ,'amazon_sales_reports.exchange_payment_amount as amazon_total','amazon_sales_reports.custom_sale_date as amazon_invoice_date','amazon_sales_reports.country_code','amazon_sales_reports.csv_id as amz_csv_val','amazon_sales_reports.net_units') 
            ->leftJoin('amazon_sales_reports', function ($join) {
                $join->on('book_details.id', '=', 'amazon_sales_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();     
        }catch(\Exception $e){
            return $e->getMessage().' Line no amazon_sales '.$e->getLine();
        }
        foreach($amazon_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['amazon_invoice_date'] >= $week_from && $item['amazon_invoice_date']<=$week_to || empty($item['amazon_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['amazon_total']; 
                $digital_qty[$item['book_id']]['qty'][]=$item['net_units'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0; 
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }
        }

        ##Apple Sales
        try{
            $apple_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','apple_sale_reports.exchange_payment_amount as apple_total','apple_sale_reports.custom_sale_date_apple as apple_start_date', 'apple_sale_reports.end_date as apple_end_date', 'apple_sale_reports.csv_id','apple_sale_reports.quantity')
            ->leftJoin('apple_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'apple_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($apple_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['apple_start_date']<=$week_to && $item['apple_start_date']>=$week_from || empty($item['apple_start_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['apple_total'];
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];  
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##barnes and nobles Sales
        try{
            $barnes_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','barnes_nobles_sale_reports.total_cost_payment_currency','barnes_nobles_sale_reports.custom_invoice_date','barnes_nobles_sale_reports.units_sold')
            ->leftJoin('barnes_nobles_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'barnes_nobles_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($barnes_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_cost_payment_currency'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['units_sold']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }

        ##comixology Sales
        try{
            $comixology_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_sale_reports.sum_publisher_share_usd','comixology_sale_reports.custom_sale_date_comix','comixology_sale_reports.sum_of_quantity')
            ->leftJoin('comixology_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($comixology_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_comix']<=$week_to && $item['custom_sale_date_comix']>=$week_from || empty($item['custom_sale_date_comix'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['sum_publisher_share_usd'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['sum_of_quantity']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }            
        }

        ##comixology subscription Sales
        try{
            $comixology_subs = DB::Table('book_details')
            ->select('book_details.id as book_id','comixology_subscription_sale_reports.total_revenue','comixology_subscription_sale_reports.custom_date_comix_subs','comixology_subscription_sale_reports.pages_read')
            ->leftJoin('comixology_subscription_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'comixology_subscription_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no comixology_subscription_sale_reports '.$e->getLine();
        }
        foreach($comixology_subs as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date_comix_subs']<=$week_to && $item['custom_date_comix_subs']>=$week_from || empty($item['custom_date_comix_subs'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['total_revenue'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['pages_read']; 
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0; 
            }  
        }

        ##google Sales
        try{
            $google_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','google_sale_reports.custom_sale_date_google','google_sale_reports.earnings_amount','google_sale_reports.quantity')
            ->leftJoin('google_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 'google_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }

        foreach($google_sales as $key=> $item){
            $item = get_object_vars($item);

            if($item['custom_sale_date_google']<=$week_to && $item['custom_sale_date_google']>=$week_from || empty($item['custom_sale_date_google'])){
                $digital_info[$item['book_id']]['sales_info'][]=$item['earnings_amount'];  
                $digital_qty[$item['book_id']]['qty'][]=$item['quantity'];
            }else{
                $digital_info[$item['book_id']]['sales_info'][]=0;  
                $digital_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        ##oni press sales
        $oni_qty = array();
        $oni_amount = array();
        try{
            $oni_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_press_shopify_sales.net_sales','oni_press_shopify_sales.custom_sale_date_oni_con','oni_press_shopify_sales.items_sold')
            ->leftJoin('oni_press_shopify_sales', function ($join) {
                $join->on('book_details.id', '=', 'oni_press_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_sale_date_oni_con']<=$week_to && $item['custom_sale_date_oni_con']>=$week_from || empty($item['custom_sale_date_oni_con'])){
                $oni_amount[$item['book_id']]['sales_info'][]=$item['net_sales']; 
                $oni_qty[$item['book_id']]['qty'][]=$item['items_sold'];
            }else{
                $oni_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_qty[$item['book_id']]['qty'][]=0;
            }
        }

        ##oni press sales
        $oni_shop_qty = array();
        $oni_shop_amount = array();
        try{
            $oni_shop_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','oni_real_shopify_sales.total_sales','oni_real_shopify_sales.net_quantity','oni_real_shopify_sales.custom_date')
            ->leftJoin('oni_real_shopify_sales', function ($join) {
            $join->on('book_details.id', '=', 'oni_real_shopify_sales.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($oni_shop_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_date']<=$week_to && $item['custom_date']>=$week_from || empty($item['custom_date'])){
                $oni_shop_amount[$item['book_id']]['sales_info'][]=$item['total_sales']; 
                $oni_shop_qty[$item['book_id']]['qty'][]=$item['net_quantity'];
            }else{
                $oni_shop_amount[$item['book_id']]['sales_info'][]=0;  
                $oni_shop_qty[$item['book_id']]['qty'][]=0;
            }
        }

        ##S & S sales 
        $ss_qty = array();
        $ss_amount = array();
        try{
            $ss_sales = DB::Table('book_details')
            ->select('book_details.id as book_id','s_s_sale_reports.dollar_net','s_s_sale_reports.custom_invoice_date','s_s_sale_reports.unit_net')
            ->leftJoin('s_s_sale_reports', function ($join) {
                $join->on('book_details.id', '=', 's_s_sale_reports.book_avail_id');
            })
            ->whereIn('book_details.id',$all_ids)->get();
        }catch(\Exception $e){
            return $e->getMessage().' Line no apple_db_info '.$e->getLine();
        }
        foreach($ss_sales as $key=> $item){
            $item = get_object_vars($item);
            if($item['custom_invoice_date']<=$week_to && $item['custom_invoice_date']>=$week_from || empty($item['custom_invoice_date'])){
                $ss_amount[$item['book_id']]['sales_info'][]=$item['dollar_net']; 
                $ss_qty[$item['book_id']]['qty'][]=$item['unit_net'];
            }else{
                $ss_amount[$item['book_id']]['sales_info'][]=0;  
                $ss_qty[$item['book_id']]['qty'][]=0;
            }            
        }

        #diamond
        $book_ids1 = implode(',', $all_ids);
        try{
            $diamond_sales = DB::select("select book_details.id,book_details.book_title,book_details.isbn_code,book_details.print_price,book_details.digital_price,book_details.diamond_item_code,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.qty_sold else NULL end ) as qty_sold,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.total_cost else NULL end ) as total_cost,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.unit_retails else NULL end ) as unit_retails,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.desc_percentage else NULL end ) as desc_percentage,(CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_to <= '".$week_to."' then book_financials.market else NULL end ) as market ,book_financials.unit_retails,book_financials.total_cost,book_financials.desc_percentage,book_details.book_choice, (CASE when book_financials.week_from >= '".$week_from."' and book_financials.week_from <= '".$week_to."' then book_financials.week_from else NULL end ) as week_from, (CASE when book_financials.week_to <= '".$week_to."' and book_financials.week_to >= '".$week_from."' then book_financials.week_to else NULL end ) as week_to FROM `book_details` left join book_financials on book_details.id = book_financials.book_avail_id where book_details.id IN (".$book_ids1.") and book_details.added_by = ".$id."  order By book_details.book_title ASC ");
        }catch(\Exception $e){
            return $e->getMessage()." Line hi  ". $e->getLine(); 
        }
        $diamond_sales = json_decode(json_encode($diamond_sales),true);
        $sales_data = array();
        if(!empty($all_ids)){
            foreach ($diamond_sales as $item) {
             #direct
            if(trim(array_search('DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_dir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty retail
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_disc[$item['id']][$item['market']] =  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES']= [
                            'store'=>$item['market'],
                            'qty_sold' => $val_totals_q,
                            'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                            'total_cost' => $total_cost_dir[$item['id']][$item['market']],
                            'discount'=>$total_cost_stores_disc[$item['id']][$item['market']],
                            'unit_retail1'=>0,

                        ];
                }
            }elseif(empty(array_search('DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_MARKET_STORES']= 
                [
                    'store'=>'DIRECT_MARKET_STORES',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost1.1'=>0,
                    'discount'=>0
                ];
            }
            if(trim(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'DIRECT_SHORTAGE_/_DAMAGE'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_dshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                                [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_dshortage[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }  
            }elseif(empty(array_search('DIRECT_SHORTAGE_/_DAMAGE',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_SHORTAGE_/_DAMAGE']= 
                        [
                        'store'=>'DIRECT_SHORTAGE_/_DAMAGE',
                        'qty_sold' => 0,
                        'unit_retails' => 0,
                        'total_cost' => 0,
                        'total_cost1.1'=>0,
                        'discount'=>0
                        ];
            }
            
            #non direct
            if(trim(array_search('NON-DIRECT_MARKET_STORES',$item, true)) === 'market'  ){
                if(trim($item['market']) == 'NON-DIRECT_MARKET_STORES'){
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_nondir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nondir[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_MARKET_STORES',$item, true)) && !isset($sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_MARKET_STORES']= 
                [
                'store'=>'NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            if(trim(array_search('NON-DIRECT_SHORTAGE',$item, true)) === 'market' ){
                if(trim($item['market']) == 'NON-DIRECT_SHORTAGE'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retail
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_nonshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']= [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nonshortage[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('NON-DIRECT_SHORTAGE',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_SHORTAGE']=[
                'store'=>'NON-DIRECT_SHORTAGE',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1.1'=>0,
                'discount'=>0
                ];
            }

            #international
            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_STORES'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_intnondir[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_intnondir[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }     
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_STORES',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES'] )){
                $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_STORES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_STORES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            if(trim(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) === 'market'){
                if(trim($item['market']) == 'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'){
                    #total qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total cost
                    $total_cost_intshortage[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost'=>$total_cost_intshortage[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount'=>$total_cost_stores_desc[$item['id']][$item['market']]
                    ];
                }
            }elseif(empty(array_search('INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',$item, true)) && !isset( $sales_data[$item['id']]['calculas'][$item['id']][$item['book_title'].'-varprice-'.$item['print_price'].'-digiprice-'.$item['digital_price']]['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES'] )){
                $sales_data[$item['id']]['calculas']['INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES']=[
                'store'=>'INTERNATIONAL_NON-DIRECT_MARKET_SHORTAGES',
                'qty_sold' => 0,
                'unit_retails' => 0,
                'total_cost' => 0,
                'total_cost1'=>0,
                'discount'=>0
                ];
            }

            #returns
            if(trim(array_search('DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'DIRECT_RETURNS'){
                    #qty
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_direturn[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_direturn[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc[$item['id']][$item['market']],
                    ];
                }

            }elseif(empty(array_search('DIRECT_RETURNS',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['DIRECT_RETURNS'] )){
                $sales_data[$item['id']]['calculas']['DIRECT_RETURNS']= [
                    'store'=>'DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' =>0,
                    'total_cost' =>0,
                    'total_cost1.1'=>0,
                    'discount' =>0,
                ];
            }

            if(trim(array_search('NON-DIRECT_RETURNS',$item, true)) === 'market'){
                if(trim($item['market']) == 'NON-DIRECT_RETURNS'){
                    #qty sold
                    $total_cost_stores_q[$item['id']][$item['market']][]=  trim($item['qty_sold']);
                    $val_totals_q = array_sum($total_cost_stores_q[$item['id']][$item['market']]);
                    #unit_retails
                    $total_cost_stores[$item['id']][$item['market']]=  trim($item['unit_retails']);
                    #total_cost
                    $total_cost_nondireturn[$item['id']][$item['market']]=  trim($item['total_cost']);
                    #discount
                    $total_cost_stores_desc[$item['id']][$item['market']]=  trim($item['desc_percentage']);
                    $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>$item['market'],
                    'qty_sold' => $val_totals_q,
                    'unit_retails' => $total_cost_stores[$item['id']][$item['market']],
                    'total_cost' => $total_cost_nondireturn[$item['id']][$item['market']],
                    'total_cost1'=>0,
                    'discount' => $total_cost_stores_desc[$item['id']][$item['market']],
                    ];
                }  
            }elseif(empty(array_search('NON-DIRECT_RETURNS',$item, true)) && !isset( $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS'] )){
                $sales_data[$item['id']]['calculas']['NON-DIRECT_RETURNS']= 
                    [
                    'store'=>'NON-DIRECT_RETURNS',
                    'qty_sold' => 0,
                    'unit_retails' => 0,
                    'total_cost' => 0,
                    'total_cost12'=>0,
                    'discount' => 0,

                    ];
            }
            $sales_data[$item['id']]['calculas']['digital_sales']=array_sum($digital_info[$item['id']]['sales_info']);
            $sales_data[$item['id']]['calculas']['digital_qty']=array_sum($digital_qty[$item['id']]['qty']);
            #oni sales
            $sales_data[$item['id']]['calculas']['oni_sales']=(array_sum($oni_amount[$item['id']]['sales_info'])*.90)+(array_sum($oni_shop_amount[$item['id']]['sales_info'])*.90);
            #oni qty
            $sales_data[$item['id']]['calculas']['oni_qty']=array_sum($oni_qty[$item['id']]['qty'])+array_sum($oni_shop_qty[$item['id']]['qty']);
             #ss sales
            $sales_data[$item['id']]['calculas']['ss_sales']=array_sum($ss_amount[$item['id']]['sales_info']);
            #ss qty
            $sales_data[$item['id']]['calculas']['ss_qty']=array_sum($ss_qty[$item['id']]['qty']);
            #expenses
            $sales_data[$item['id']]['book_details']['expense'] = $expense[$item['id']];
            } # main array foreach ends
        }

        ##ADVANCES
        try{
            $advance = DB::table('book_details')
            ->select('book_advances.amount','book_advances.year','book_advances.quarter','book_advances.id as a_id','book_details.id as book_id') 
            ->leftJoin('book_advances', function ($join) {
                $join->on('book_advances.book_id', '=', 'book_details.id');
            })
            ->whereIn('book_details.id',$all_ids)
            ->where(function ($query) {
            $query->where('book_advances.amount', '<>', '', 'and')
            ->orWhereNull('book_advances.amount');
            })->get()->toarray();
        }catch(\Exception $e){
            return $e->getMessage();
        }

        #advance current qtr : collecting advances based on the qtr selected
        $amount_current_quarter = array();
        foreach($advance as $item){
            $item = get_object_vars($item);
            #if not a custom array, filter it based on the year and quarter
            if($selected_quarter != 5 ){
                if($item['quarter']==$selected_quarter && $item['year'] == $selected_year){
                    $amount_current_quarter[$item['book_id']][$item['a_id']] =$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }else{
                #custom quarter dates
                $default_first_date = date('Y-m-d', strtotime($selected_year . '-' . ((1 * 3) - 2) . '-1'));
                $default_last_date = date('Y-m-t', strtotime($selected_year . '-' . ((4 * 3)) . '-1'));
                if(\Session::get('week_from') == ""){
                    $custom_week_from = $default_first_date; 
                }else{
                   $custom_week_from = \Session::get('week_from');
                }
                if(\Session::get('week_to') == ""){
                    $custom_week_to = $default_last_date;
                }else{
                   $custom_week_to = \Session::get('week_to');
                }
                $custom_quarter_from = ceil(date('m', strtotime($custom_week_from))/3);
                $custom_quarter_to = ceil(date('m', strtotime($custom_week_to))/3);
                #custom quarter amount
                if($item['year'] == $selected_year && ( $item['quarter'] >= $custom_quarter_from && $item['quarter'] <= $custom_quarter_to )){
                    $amount_current_quarter[$item['book_id']][$item['a_id']]=$item['amount'];
                }else{
                    if(!isset( $amount_current_quarter[$item['book_id']][$item['a_id']])){
                        $amount_current_quarter[$item['book_id']][$item['a_id']]=0;
                    }
                }
            }
        }

        ##CREATION OF FINAL ARRAY!
        
        if(isset($book_data['simple'])){
            foreach($book_data['simple'] as $book_id => $data){
                if(isset($sales_data[$book_id])){
                    $book_data['simple'][$book_id]["sales"]=$sales_data[$book_id];
                }
            }
        }

        foreach($book_data as $book_id => $data){
            if($book_id == 'simple'){continue;}
            $book_data[$book_id]["main"]["sales"]=$sales_data[$book_id];
            if(isset($data['sub_title'])){
                foreach ($data['sub_title'] as $container_id => $value) {
                    if(isset($sales_data[$container_id])){
                        $book_data[$book_id]["sub_title"][$container_id]["container_sales"]=$sales_data[$container_id];
                    }
                }
            }
        }
        $final_book = array();
        $check_containees = array_unique(json_decode(json_encode($check_containees)));
        foreach($book_data  as $book_id =>  $item){
            if($book_id == "simple"){$final_book[$book_id]  = $item;}
            else{
                if(isset($item['main'])){
                    $final_book['main_items'][$book_id]  = $item;
                }
            }
        }
        $pdf = PDF::loadView('pdf/booksale_all',compact('contri_info','book_ids','selected_quarter', 'selected_year','week_from','week_to','amount_current_quarter','previous_quarter','final_book','percentage_Array','royalty_choice','print_price','creator_name'));
        return $pdf->stream(); //to view the pdf
    } #ends here all_container_items 
}#end class