class Origami::WasteSpoileController < BaseOrigamiController
  def waste_and_spoilage

    sale_id = params[:sale_id]
    remark  = params[:remark]
    order_source = params[:type]
    access_code = params[:access_code] #tax profile source
    if Sale.exists?(sale_id)
      sale = Sale.find_by_sale_id(sale_id)
      SaleTax.where("sale_id='#{sale_id}'").find_each do |existing_tax|
        existing_tax.delete
      end
      sale.update_attributes(total_discount: 0,total_tax: 0,grand_total: sale.total_amount,rounding_adjustment:0)
      sale.payment_status = remark
      sale.sale_status = remark
      sale.save

      # sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
       # add to sale item with foc
      # sale_items = SaleItem.where("sale_id='#{ sale_id }' and status is null")
      
      sale.sale_items.each do|item|
        # SaleItem.update_existing_item(item.qty, item, sale_id, remark, item.unit_price, item.price)
        item.status = remark
        item.remark = remark
        item.save
      end

      if sale.bookings[0].dining_facility_id.to_i > 0
        table_avaliable = true
        table_count = 0
        table = sale.bookings[0].dining_facility
        table.bookings.each do |booking|
          if booking.booking_status != 'moved'
            if booking.sale_id
              if booking.sale.sale_status != 'completed' && booking.sale.sale_status != 'void' && booking.sale.sale_status != 'spoile' && booking.sale.sale_status != 'waste'
                table_avaliable = false
                table_count += 1
              else
                table_avaliable = true
              end
            else
              table_avaliable = false
              table_count += 1
            end
          end
        end
        if table_avaliable && table_count == 0
          table.status = 'available'
          table.save
        end
      else
        table = nil
      end

      # FOr Sale Audit 
      action_by = current_user.name
      if access_code != "null" && current_user.role == "cashier"
        action_by = Employee.find_by_emp_id(access_code).name
      end
      # remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
      sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,remark )

      # For Print 

      member_info   = nil
      rebate_amount = nil
      current_balance = nil

      # For Cashier by Zone
      bookings = Booking.where("sale_id='#{sale_id}'")
      if bookings.count > 1 
        # for Multiple Booking
        if bookings[0].dining_facility_id.to_i>0
          table = DiningFacility.find(bookings[0].dining_facility_id)
        end
      end

      if bookings[0].dining_facility_id.to_i > 0
        cashier_zone     = CashierTerminalByZone.find_by_zone_id(table.zone_id)
        cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)
      else
        shift = ShiftSale.find(sale.shift_sale_id)
        cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
      end
      

      # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
        unique_code = "ReceiptBillPdf"
        customer= Customer.find(sale.customer_id)
        
         #shop detail
        shop_details = Shop.find(1)
         # get member information
        rebate = MembershipSetting.find_by_rebate(1)
        if customer.membership_id != nil && rebate
          member_info = Customer.get_member_account(customer)
          rebate_amount  = Customer.get_membership_transactions(customer,sale.receipt_no)
          # current_balance = SaleAudit.paymal_search(sale_id)
           current_balance = 0
        end

        # get printer info
        print_settings=PrintSetting.find_by_unique_code(unique_code)
        # Calculate Food and Beverage Total
        item_price_by_accounts = SaleItem.calculate_price_by_accounts(sale.sale_items)
        discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale.sale_items)

        printer = Printer::ReceiptPrinter.new(print_settings)                                    
        filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,sale.sale_items,sale,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, remark,current_balance,nil)   
        result = { 
              :filepath => filename, 
              :printer_model => print_settings.brand_name, 
              :printer_url => print_settings.api_settings 
            }

        # Mobile Print
        render :json => result.to_json
      # end
      
      #end print

      # update complete order items in oqs
      SaleOrder.where("sale_id = '#{ sale_id }'").find_each do |sodr|        
        AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi|
          aoi.delivery_status = 1
          aoi.save
        end
      end
    end
  end 
 
end