|
@@ -4,8 +4,8 @@ class SalesController < ApplicationController
|
|
|
##--- Breadcrum_rails
|
|
##--- Breadcrum_rails
|
|
|
add_breadcrumb I18n.t("breadcrumbs." + controller_name), :sales_path
|
|
add_breadcrumb I18n.t("breadcrumbs." + controller_name), :sales_path
|
|
|
add_breadcrumb "Nueva " + I18n.t("breadcrumbs." + controller_name).singularize, :new_sale_path, only: :new
|
|
add_breadcrumb "Nueva " + I18n.t("breadcrumbs." + controller_name).singularize, :new_sale_path, only: :new
|
|
|
- add_breadcrumb "Detalle de la " + I18n.t("breadcrumbs." + controller_name).singularize , :sale_path, only: :show
|
|
|
|
|
- add_breadcrumb "Editar " + I18n.t("breadcrumbs." + controller_name).singularize , :edit_sale_path, only: :edit
|
|
|
|
|
|
|
+ add_breadcrumb "Detalle de la " + I18n.t("breadcrumbs." + controller_name).singularize, :sale_path, only: :show
|
|
|
|
|
+ add_breadcrumb "Editar " + I18n.t("breadcrumbs." + controller_name).singularize, :edit_sale_path, only: :edit
|
|
|
|
|
|
|
|
before_action :set_sale, only: [:show, :edit, :update, :destroy]
|
|
before_action :set_sale, only: [:show, :edit, :update, :destroy]
|
|
|
before_action :get_filters, only: [:index, :show, :edit, :new, :sales_reserved]
|
|
before_action :get_filters, only: [:index, :show, :edit, :new, :sales_reserved]
|
|
@@ -15,29 +15,21 @@ class SalesController < ApplicationController
|
|
|
def index
|
|
def index
|
|
|
today = Date.current
|
|
today = Date.current
|
|
|
thirty_day_ago = today - 30
|
|
thirty_day_ago = today - 30
|
|
|
- if current_user.usertype == 'A'
|
|
|
|
|
- @sales = Sale.includes(:customer, :user, :seller).where(:date_sale => thirty_day_ago..today).where('saletype != 2').order(" created_at DESC ")
|
|
|
|
|
- else
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.includes(:customer, :user, :seller).where(:date_sale => thirty_day_ago..today).where('saletype != 2').order(" created_at DESC ")
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ @sales = current_user.usertype == 'A' ? Sale.includes(:customer, :user, :seller).where(date_sale: thirty_day_ago..today).where('saletype != 2').order(" created_at DESC ") : Pointsale.find(current_user.pointsale_id).sales.includes(:customer, :user, :seller).where(date_sale: thirty_day_ago..today).where('saletype != 2').order(" created_at DESC ")
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def sales_reserved
|
|
def sales_reserved
|
|
|
beg_of_month = Date.current.beginning_of_month
|
|
beg_of_month = Date.current.beginning_of_month
|
|
|
end_of_month = Date.current.end_of_month
|
|
end_of_month = Date.current.end_of_month
|
|
|
- if current_user.usertype == 'A'
|
|
|
|
|
- @sales = Sale.where(:saletype => 2).order(" created_at DESC ")
|
|
|
|
|
- else
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.where(:saletype => 2).order(" created_at DESC")
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ @sales = current_user.usertype == 'A' ? Sale.where(saletype: 2).order(" created_at DESC ") : Pointsale.find(current_user.pointsale_id).sales.where(saletype: 2).order(" created_at DESC")
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
# GET /sales/1
|
|
# GET /sales/1
|
|
|
# GET /sales/1.json
|
|
# GET /sales/1.json
|
|
|
def show
|
|
def show
|
|
|
- @payments = CashRegistersMove.where(:sale_id => @sale.id, :status => 1)
|
|
|
|
|
|
|
+ @payments = CashRegistersMove.where(sale_id: @sale.id, status: 1)
|
|
|
# saca la devolucion si es que hay.
|
|
# saca la devolucion si es que hay.
|
|
|
- @products_return = ProductsReturn.find_by(:sale_id => @sale.id)
|
|
|
|
|
|
|
+ @products_return = ProductsReturn.find_by(sale_id: @sale.id)
|
|
|
@returned_prods_ids = Array.new
|
|
@returned_prods_ids = Array.new
|
|
|
@returned_prods_ids = @products_return.products_return_ins.pluck(:product_id) if @products_return.present?
|
|
@returned_prods_ids = @products_return.products_return_ins.pluck(:product_id) if @products_return.present?
|
|
|
end
|
|
end
|
|
@@ -46,18 +38,16 @@ class SalesController < ApplicationController
|
|
|
def new
|
|
def new
|
|
|
@sale = Sale.new
|
|
@sale = Sale.new
|
|
|
@sale.sales_details.new
|
|
@sale.sales_details.new
|
|
|
- @general_public_id = Customer.find_by(:is_public => 1).id
|
|
|
|
|
- @pre_sales = PreSale.where(:user_id => current_user.id)
|
|
|
|
|
|
|
+ @general_public_id = Customer.find_by(is_public: 1).id
|
|
|
|
|
+ @pre_sales = PreSale.where(user_id: current_user.id)
|
|
|
@sale.saletype = 'cash'
|
|
@sale.saletype = 'cash'
|
|
|
- #se desactivan cuando tienen pre sales, para mantener la congruencia de los datos.
|
|
|
|
|
|
|
+ # se desactivan cuando tienen pre sales, para mantener la congruencia de los datos.
|
|
|
@disabled_select = false
|
|
@disabled_select = false
|
|
|
@disabled_button = true
|
|
@disabled_button = true
|
|
|
@enable_radios = true
|
|
@enable_radios = true
|
|
|
- if current_user.usertype != "G"
|
|
|
|
|
- @open_cash_register = current_user.get_open_cash_register
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- if @pre_sales.size > 0
|
|
|
|
|
|
|
+ @opened_cash_registers = Pointsale.find(current_user.pointsale_id).open_cash_registers.abiertas
|
|
|
|
|
+ @sale.open_cash_register_id = session[:open_cash_register_id] || nil
|
|
|
|
|
+ if @pre_sales.present?
|
|
|
@sale.saletype = @pre_sales[0].sale_type
|
|
@sale.saletype = @pre_sales[0].sale_type
|
|
|
@sale.customer_id = @pre_sales[0].customer_id
|
|
@sale.customer_id = @pre_sales[0].customer_id
|
|
|
@sale.open_cash_register_id = @pre_sales[0].open_cash_register_id
|
|
@sale.open_cash_register_id = @pre_sales[0].open_cash_register_id
|
|
@@ -68,17 +58,17 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
# GET /sales/1/edit
|
|
# GET /sales/1/edit
|
|
|
- def edit
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ def edit; end
|
|
|
|
|
|
|
|
# POST /sales
|
|
# POST /sales
|
|
|
# POST /sales.json
|
|
# POST /sales.json
|
|
|
|
|
+ # rubocop:disable Metrics/BlockLength
|
|
|
def create
|
|
def create
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
@sale = Sale.new(sale_params)
|
|
@sale = Sale.new(sale_params)
|
|
|
- @pre_sales = PreSale.where(:user_id => current_user.id)
|
|
|
|
|
|
|
+ @pre_sales = PreSale.where(user_id: current_user.id)
|
|
|
@sale.user_id = current_user.id
|
|
@sale.user_id = current_user.id
|
|
|
- @sale.open_cash_register_id = current_user.pointsale.get_open_cash_register.id
|
|
|
|
|
|
|
+ @sale.open_cash_register_id = session[:open_cash_register_id]
|
|
|
@sale.status = :notpaid
|
|
@sale.status = :notpaid
|
|
|
@sale.expiration_date = Date.today + @pos_config.days_cancel_reserved if @sale.reserved?
|
|
@sale.expiration_date = Date.today + @pos_config.days_cancel_reserved if @sale.reserved?
|
|
|
|
|
|
|
@@ -101,28 +91,27 @@ class SalesController < ApplicationController
|
|
|
@sale.sales_details << detail
|
|
@sale.sales_details << detail
|
|
|
pre_sale.destroy
|
|
pre_sale.destroy
|
|
|
# actualizar stock del producto
|
|
# actualizar stock del producto
|
|
|
- stockProduct = AvailableProduct.find_by(:product_id => detail.product_id, :pointsale_id => @sale.get_pointsale.id)
|
|
|
|
|
- unless stockProduct.blank?
|
|
|
|
|
- if stockProduct.stock.present?
|
|
|
|
|
- stockProduct.stock = stockProduct.stock - detail.quantity
|
|
|
|
|
- stockProduct.save
|
|
|
|
|
- else
|
|
|
|
|
- errors.add(:base, "No se tiene registrado el stock de alguno de los productos, es necesario configurarlo antes de generar una venta")
|
|
|
|
|
- format.json { render json: @sale.errors.values, status: :unprocessable_entity }
|
|
|
|
|
- end
|
|
|
|
|
- # guardar en bitacora de inventario
|
|
|
|
|
- move = InventoriesMove.new
|
|
|
|
|
- move.product_id = detail.product_id
|
|
|
|
|
- move.sale_id = @sale.id
|
|
|
|
|
- move.quantity = detail.quantity
|
|
|
|
|
- move.move_type = "outgoing"
|
|
|
|
|
- move.reason = "sale"
|
|
|
|
|
- move.save
|
|
|
|
|
|
|
+ stock_product = AvailableProduct.find_by(product_id: detail.product_id, pointsale_id: @sale.get_pointsale.id)
|
|
|
|
|
+ next if stock_product.blank?
|
|
|
|
|
+ if stock_product.stock.present?
|
|
|
|
|
+ stock_product.stock = stock_product.stock - detail.quantity
|
|
|
|
|
+ stock_product.save
|
|
|
|
|
+ else
|
|
|
|
|
+ errors.add(:base, "No se tiene registrado el stock de alguno de los productos, es necesario configurarlo antes de generar una venta")
|
|
|
|
|
+ format.json { render json: @sale.errors.values, status: :unprocessable_entity }
|
|
|
end
|
|
end
|
|
|
|
|
+ # guardar en bitacora de inventario
|
|
|
|
|
+ move = InventoriesMove.new
|
|
|
|
|
+ move.product_id = detail.product_id
|
|
|
|
|
+ move.sale_id = @sale.id
|
|
|
|
|
+ move.quantity = detail.quantity
|
|
|
|
|
+ move.move_type = "outgoing"
|
|
|
|
|
+ move.reason = "sale"
|
|
|
|
|
+ move.save
|
|
|
end
|
|
end
|
|
|
# dependiendo el tipo de venta: contado/credito determina que hacer
|
|
# dependiendo el tipo de venta: contado/credito determina que hacer
|
|
|
if @sale.cash?
|
|
if @sale.cash?
|
|
|
- format.js { redirect_to new_cash_registers_move_path(:sale => @sale.id) }
|
|
|
|
|
|
|
+ format.js { redirect_to new_cash_registers_move_path(sale: @sale.id) }
|
|
|
elsif @sale.credit?
|
|
elsif @sale.credit?
|
|
|
credit = Credit.new
|
|
credit = Credit.new
|
|
|
credit.customer_id = @sale.customer_id
|
|
credit.customer_id = @sale.customer_id
|
|
@@ -136,7 +125,7 @@ class SalesController < ApplicationController
|
|
|
flash[:success] = "Venta a credito registrada al cliente: #{@sale.customer.nick_name} por $ #{@sale.total}"
|
|
flash[:success] = "Venta a credito registrada al cliente: #{@sale.customer.nick_name} por $ #{@sale.total}"
|
|
|
format.js { render 'create_credit_sale' }
|
|
format.js { render 'create_credit_sale' }
|
|
|
elsif @sale.reserved?
|
|
elsif @sale.reserved?
|
|
|
- format.js { redirect_to new_cash_registers_move_path(:sale => @sale.id) }
|
|
|
|
|
|
|
+ format.js { redirect_to new_cash_registers_move_path(sale: @sale.id) }
|
|
|
end
|
|
end
|
|
|
else
|
|
else
|
|
|
format.js
|
|
format.js
|
|
@@ -144,6 +133,7 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
+ # rubocop:enable Metrics/BlockLength
|
|
|
|
|
|
|
|
# PATCH/PUT /sales/1
|
|
# PATCH/PUT /sales/1
|
|
|
# PATCH/PUT /sales/1.json
|
|
# PATCH/PUT /sales/1.json
|
|
@@ -161,21 +151,23 @@ class SalesController < ApplicationController
|
|
|
|
|
|
|
|
# DELETE /sales/1
|
|
# DELETE /sales/1
|
|
|
# DELETE /sales/1.json
|
|
# DELETE /sales/1.json
|
|
|
|
|
+ # rubocop:disable Metrics/BlockLength
|
|
|
def destroy
|
|
def destroy
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
@sale.audit_comment = "Venta #{@sale.sale_code} cancelada."
|
|
@sale.audit_comment = "Venta #{@sale.sale_code} cancelada."
|
|
|
- if @sale.update_attributes(:status => :cancelled)
|
|
|
|
|
|
|
+ if @sale.update_attributes(status: :cancelled)
|
|
|
|
|
+ # rubocop:disable Metrics/BlockNesting
|
|
|
if @sale.reserved?
|
|
if @sale.reserved?
|
|
|
return_cash = params[:return_cash]
|
|
return_cash = params[:return_cash]
|
|
|
if return_cash == 'true'
|
|
if return_cash == 'true'
|
|
|
- moves = CashRegistersMove.where(:sale_id => @sale.id, :move_type => 1)
|
|
|
|
|
|
|
+ moves = CashRegistersMove.where(sale_id: @sale.id, move_type: 1)
|
|
|
if moves.present?
|
|
if moves.present?
|
|
|
if moves[0].open_cash_register.closed?
|
|
if moves[0].open_cash_register.closed?
|
|
|
quantity_to_return = moves.sum(:quantity)
|
|
quantity_to_return = moves.sum(:quantity)
|
|
|
new_cash_move = CashRegistersMove.new
|
|
new_cash_move = CashRegistersMove.new
|
|
|
new_cash_move.skip_received_validation = true
|
|
new_cash_move.skip_received_validation = true
|
|
|
- new_cash_move.open_cash_register_id = current_user.get_open_cash_register.id
|
|
|
|
|
- new_cash_move.payment_method_id = PaymentMethod.find_by(:isCash => 1).id
|
|
|
|
|
|
|
+ new_cash_move.open_cash_register_id = session[:open_cash_register_id]
|
|
|
|
|
+ new_cash_move.payment_method_id = PaymentMethod.find_by(isCash: 1).id
|
|
|
new_cash_move.quantity = quantity_to_return
|
|
new_cash_move.quantity = quantity_to_return
|
|
|
new_cash_move.move_type = :egreso
|
|
new_cash_move.move_type = :egreso
|
|
|
new_cash_move.sale_id = @sale.id
|
|
new_cash_move.sale_id = @sale.id
|
|
@@ -188,15 +180,15 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
elsif @sale.cash?
|
|
elsif @sale.cash?
|
|
|
- #checa si hay pagos de esta venta
|
|
|
|
|
- moves = CashRegistersMove.where(:sale_id => @sale.id)
|
|
|
|
|
- #si la caja sigue abierta, solo elimina los moves, si ya cortó, genera un egreso por esa cantidad
|
|
|
|
|
|
|
+ # checa si hay pagos de esta venta
|
|
|
|
|
+ moves = CashRegistersMove.where(sale_id: @sale.id)
|
|
|
|
|
+ # si la caja sigue abierta, solo elimina los moves, si ya corto, genera un egreso por esa cantidad
|
|
|
if moves.present?
|
|
if moves.present?
|
|
|
if moves[0].open_cash_register.closed?
|
|
if moves[0].open_cash_register.closed?
|
|
|
new_cash_move = CashRegistersMove.new
|
|
new_cash_move = CashRegistersMove.new
|
|
|
new_cash_move.skip_received_validation = true
|
|
new_cash_move.skip_received_validation = true
|
|
|
- new_cash_move.open_cash_register_id = current_user.pointsale.get_open_cash_register.id
|
|
|
|
|
- new_cash_move.payment_method_id = PaymentMethod.find_by(:isCash => true).id
|
|
|
|
|
|
|
+ new_cash_move.open_cash_register_id = session[:open_cash_register_id]
|
|
|
|
|
+ new_cash_move.payment_method_id = PaymentMethod.find_by(isCash: true).id
|
|
|
new_cash_move.quantity = moves.sum(:quantity)
|
|
new_cash_move.quantity = moves.sum(:quantity)
|
|
|
new_cash_move.move_type = :egreso
|
|
new_cash_move.move_type = :egreso
|
|
|
new_cash_move.sale_id = moves[0].sale_id
|
|
new_cash_move.sale_id = moves[0].sale_id
|
|
@@ -209,68 +201,57 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
elsif @sale.credit?
|
|
elsif @sale.credit?
|
|
|
- credit = Credit.find_by(:sale_id => @sale.id, :customer_id => @sale.customer_id)
|
|
|
|
|
- credit.update_attributes(:status => :cancelled)
|
|
|
|
|
|
|
+ credit = Credit.find_by(sale_id: @sale.id, customer_id: @sale.customer_id)
|
|
|
|
|
+ credit.update_attributes(status: :cancelled)
|
|
|
end
|
|
end
|
|
|
|
|
+ # rubocop:enable Metrics/BlockNesting
|
|
|
@sale.sales_details.each do |detail|
|
|
@sale.sales_details.each do |detail|
|
|
|
- detail.update_attributes(:status => :inactive)
|
|
|
|
|
- stockProduct = AvailableProduct.find_by(:product_id => detail.product_id, :pointsale_id => @sale.get_pointsale.id)
|
|
|
|
|
- unless stockProduct.blank?
|
|
|
|
|
- # sumarle al stock del producto
|
|
|
|
|
- stock = stockProduct.stock + detail.quantity
|
|
|
|
|
- stockProduct.update_attributes(:stock => stock)
|
|
|
|
|
- # guardar en bitacora de inventario
|
|
|
|
|
- move = InventoriesMove.new
|
|
|
|
|
- move.product_id = detail.product_id
|
|
|
|
|
- move.sale_id = @sale.id
|
|
|
|
|
- move.quantity = detail.quantity
|
|
|
|
|
- move.move_type = "incoming"
|
|
|
|
|
- move.reason = @sale.reserved? ? "sale_reserved_cancelled" : "sale_cancel"
|
|
|
|
|
- move.save
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ detail.update_attributes(status: :inactive)
|
|
|
|
|
+ stock_product = AvailableProduct.find_by(product_id: detail.product_id, pointsale_id: @sale.get_pointsale.id)
|
|
|
|
|
+ next if stock_product.blank?
|
|
|
|
|
+ # sumarle al stock del producto
|
|
|
|
|
+ stock = stock_product.stock + detail.quantity
|
|
|
|
|
+ stock_product.update_attributes(stock: stock)
|
|
|
|
|
+ # guardar en bitacora de inventario
|
|
|
|
|
+ move = InventoriesMove.new
|
|
|
|
|
+ move.product_id = detail.product_id
|
|
|
|
|
+ move.sale_id = @sale.id
|
|
|
|
|
+ move.quantity = detail.quantity
|
|
|
|
|
+ move.move_type = "incoming"
|
|
|
|
|
+ move.reason = @sale.reserved? ? "sale_reserved_cancelled" : "sale_cancel"
|
|
|
|
|
+ move.save
|
|
|
end
|
|
end
|
|
|
- format.html { redirect_to (@sale.reserved? ? sales_reserved_path : sales_url),
|
|
|
|
|
- warning: (@sale.reserved? ? "Apartado con folio #{@sale.sale_code} cancelado." : "Venta con folio #{@sale.sale_code} cancelado.") }
|
|
|
|
|
|
|
+ format.html { redirect_to (@sale.reserved? ? sales_reserved_path : sales_url), warning: (@sale.reserved? ? "Apartado con folio #{@sale.sale_code} cancelado." : "Venta con folio #{@sale.sale_code} cancelado.") }
|
|
|
format.json { head :no_content }
|
|
format.json { head :no_content }
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
+ # rubocop:enable Metrics/BlockLength
|
|
|
|
|
|
|
|
def find_sales_by_date
|
|
def find_sales_by_date
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
- startDate = DateTime.parse(params[:begin_date])
|
|
|
|
|
- endDate = DateTime.parse(params[:end_date])
|
|
|
|
|
-
|
|
|
|
|
- if current_user.usertype == 'A'
|
|
|
|
|
- @sales = Sale.where(:date_sale => startDate..endDate).where('saletype != 2').order(" created_at DESC ")
|
|
|
|
|
- else
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.where(:date_sale => startDate..endDate).where('saletype != 2').order(" created_at DESC ")
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ start_date = DateTime.parse(params[:begin_date])
|
|
|
|
|
+ end_date = DateTime.parse(params[:end_date])
|
|
|
|
|
+ @sales = current_user.usertype == 'A' ? Sale.where(date_sale: start_date..end_date).where('saletype != 2').order(" created_at DESC ") : Pointsale.find(current_user.pointsale_id).sales.where(date_sale: start_date..end_date).where('saletype != 2').order(" created_at DESC ")
|
|
|
format.js
|
|
format.js
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def find_customer_sales_by_date
|
|
def find_customer_sales_by_date
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
- startDate = DateTime.parse(params[:begin_date])
|
|
|
|
|
- endDate = DateTime.parse(params[:end_date])
|
|
|
|
|
|
|
+ start_date = DateTime.parse(params[:begin_date])
|
|
|
|
|
+ end_date = DateTime.parse(params[:end_date])
|
|
|
cliente = params[:cliente]
|
|
cliente = params[:cliente]
|
|
|
-
|
|
|
|
|
- @sales = Sale.where(:date_sale => startDate..endDate, :customer_id => cliente).where('saletype != 2').order(" id DESC ")
|
|
|
|
|
-
|
|
|
|
|
- format.js { render :action => "find_sales_by_date" }
|
|
|
|
|
|
|
+ @sales = Sale.where(date_sale: start_date..end_date, customer_id: cliente).where('saletype != 2').order(" id DESC ")
|
|
|
|
|
+ format.js { render action: "find_sales_by_date" }
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def find_reserved_sales_by_date
|
|
def find_reserved_sales_by_date
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
- startDate = DateTime.parse(params[:begin_date])
|
|
|
|
|
- endDate = DateTime.parse(params[:end_date])
|
|
|
|
|
- if current_user.usertype == 'A'
|
|
|
|
|
- @sales = Sale.where(:date_sale => startDate..endDate, :saletype => 2).order(" created_at DESC ")
|
|
|
|
|
- else
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.where(:date_sale => startDate..endDate).where('saletype = 2').order(" created_at DESC ")
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ start_date = DateTime.parse(params[:begin_date])
|
|
|
|
|
+ end_date = DateTime.parse(params[:end_date])
|
|
|
|
|
+ @sales = current_user.usertype == 'A' ? Sale.where(date_sale: start_date..end_date, saletype: 2).order(" created_at DESC ") : Pointsale.find(current_user.pointsale_id).sales.where(date_sale: start_date..end_date).where('saletype = 2').order(" created_at DESC ")
|
|
|
format.js
|
|
format.js
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
@@ -278,23 +259,22 @@ class SalesController < ApplicationController
|
|
|
def return_expired
|
|
def return_expired
|
|
|
@sale = Sale.find(params[:sale_id])
|
|
@sale = Sale.find(params[:sale_id])
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
- if @sale.update_attributes(:status => :cancelled_by_expiration)
|
|
|
|
|
|
|
+ if @sale.update_attributes(status: :cancelled_by_expiration)
|
|
|
@sale.sales_details.each do |detail|
|
|
@sale.sales_details.each do |detail|
|
|
|
- detail.update_attributes(:status => :inactive)
|
|
|
|
|
- stockProduct = AvailableProduct.find_by(:product_id => detail.product_id, :pointsale_id => @sale.get_pointsale.id)
|
|
|
|
|
- unless stockProduct.blank?
|
|
|
|
|
- # sumarle al stock del producto
|
|
|
|
|
- stock = stockProduct.stock + detail.quantity
|
|
|
|
|
- stockProduct.update_attributes(:stock => stock)
|
|
|
|
|
- # guardar en bitacora de inventario
|
|
|
|
|
- move = InventoriesMove.new
|
|
|
|
|
- move.product_id = detail.product_id
|
|
|
|
|
- move.sale_id = @sale.id
|
|
|
|
|
- move.quantity = detail.quantity
|
|
|
|
|
- move.move_type = "incoming"
|
|
|
|
|
- move.reason = "sale_expired"
|
|
|
|
|
- move.save
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ detail.update_attributes(status: :inactive)
|
|
|
|
|
+ stock_product = AvailableProduct.find_by(product_id: detail.product_id, pointsale_id: @sale.get_pointsale.id)
|
|
|
|
|
+ next if stock_product.blank?
|
|
|
|
|
+ # sumarle al stock del producto
|
|
|
|
|
+ stock = stock_product.stock + detail.quantity
|
|
|
|
|
+ stock_product.update_attributes(stock: stock)
|
|
|
|
|
+ # guardar en bitacora de inventario
|
|
|
|
|
+ move = InventoriesMove.new
|
|
|
|
|
+ move.product_id = detail.product_id
|
|
|
|
|
+ move.sale_id = @sale.id
|
|
|
|
|
+ move.quantity = detail.quantity
|
|
|
|
|
+ move.move_type = "incoming"
|
|
|
|
|
+ move.reason = "sale_expired"
|
|
|
|
|
+ move.save
|
|
|
end
|
|
end
|
|
|
format.html { redirect_to sales_reserved_url, warning: "Productos reingresados al inventario del apartado #{@sale.sale_code}." }
|
|
format.html { redirect_to sales_reserved_url, warning: "Productos reingresados al inventario del apartado #{@sale.sale_code}." }
|
|
|
format.json { head :no_content }
|
|
format.json { head :no_content }
|
|
@@ -305,8 +285,8 @@ class SalesController < ApplicationController
|
|
|
def liquidate_reserve
|
|
def liquidate_reserve
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
@sale = Sale.find(params[:sale_id])
|
|
@sale = Sale.find(params[:sale_id])
|
|
|
- @payments = CashRegistersMove.where(:sale_id => @sale.id, :status => 1)
|
|
|
|
|
- format.js { redirect_to new_cash_registers_move_path(:sale => @sale.id) }
|
|
|
|
|
|
|
+ @payments = CashRegistersMove.where(sale_id: @sale.id, status: 1)
|
|
|
|
|
+ format.js { redirect_to new_cash_registers_move_path(sale: @sale.id) }
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
@@ -315,41 +295,29 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def print_receipt
|
|
def print_receipt
|
|
|
- #ticket para la venta
|
|
|
|
|
|
|
+ # ticket para la venta
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
sale = Sale.find(params[:sale_id])
|
|
sale = Sale.find(params[:sale_id])
|
|
|
format.pdf do
|
|
format.pdf do
|
|
|
- render pdf: "ticket_venta_#{sale.id}",
|
|
|
|
|
- template: "sales/receipt.pdf.erb",
|
|
|
|
|
- layout: 'receipt.html.erb',
|
|
|
|
|
- locals: { :sale => sale },
|
|
|
|
|
- show_as_html: params.key?('debug'),
|
|
|
|
|
- page_width: '80mm',
|
|
|
|
|
- page_height: '300mm'
|
|
|
|
|
|
|
+ render pdf: "ticket_venta_#{sale.id}", template: "sales/receipt.pdf.erb", layout: 'receipt.html.erb', locals: { sale: sale }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def print_reserve_receipt
|
|
def print_reserve_receipt
|
|
|
- #ticket para apartado
|
|
|
|
|
|
|
+ # ticket para apartado
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
sale = Sale.find(params[:sale_id])
|
|
sale = Sale.find(params[:sale_id])
|
|
|
# debt = sale.cash_registers_moves.first.quantity
|
|
# debt = sale.cash_registers_moves.first.quantity
|
|
|
debt = sale.cash_registers_moves.sum(:quantity)
|
|
debt = sale.cash_registers_moves.sum(:quantity)
|
|
|
format.pdf do
|
|
format.pdf do
|
|
|
- render pdf: "ticket_apartado_#{sale.id}",
|
|
|
|
|
- template: "sales/receipt_reserve.pdf.erb",
|
|
|
|
|
- layout: 'receipt.html.erb',
|
|
|
|
|
- locals: { :sale => sale, :debt => debt },
|
|
|
|
|
- show_as_html: params.key?('debug'),
|
|
|
|
|
- page_width: '80mm',
|
|
|
|
|
- page_height: '300mm'
|
|
|
|
|
|
|
+ render pdf: "ticket_apartado_#{sale.id}", template: "sales/receipt_reserve.pdf.erb", layout: 'receipt.html.erb', locals: { sale: sale, debt: debt }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def print_credit_receipt
|
|
def print_credit_receipt
|
|
|
- #ticket para credito
|
|
|
|
|
|
|
+ # ticket para credito
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
sale = Sale.find(params[:sale_id])
|
|
sale = Sale.find(params[:sale_id])
|
|
|
debt = 0
|
|
debt = 0
|
|
@@ -359,52 +327,34 @@ class SalesController < ApplicationController
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
format.pdf do
|
|
format.pdf do
|
|
|
- render pdf: "ticket_credito_#{sale.id}",
|
|
|
|
|
- template: "sales/receipt_credit.pdf.erb",
|
|
|
|
|
- layout: 'receipt.html.erb',
|
|
|
|
|
- locals: { :sale => sale, :debt => debt },
|
|
|
|
|
- show_as_html: params.key?('debug'),
|
|
|
|
|
- page_width: '80mm',
|
|
|
|
|
- page_height: '300mm'
|
|
|
|
|
|
|
+ render pdf: "ticket_credito_#{sale.id}", template: "sales/receipt_credit.pdf.erb", layout: 'receipt.html.erb', locals: { sale: sale, debt: debt }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def print_partial_payment_receipt
|
|
def print_partial_payment_receipt
|
|
|
- #ticket para abonos a apartado
|
|
|
|
|
|
|
+ # ticket para abonos a apartado
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
sale = Sale.find(params[:sale_id])
|
|
sale = Sale.find(params[:sale_id])
|
|
|
new_moves = CashRegistersMove.where(id: params[:new_moves_array])
|
|
new_moves = CashRegistersMove.where(id: params[:new_moves_array])
|
|
|
quantity = new_moves.sum(:quantity)
|
|
quantity = new_moves.sum(:quantity)
|
|
|
format.pdf do
|
|
format.pdf do
|
|
|
- render pdf: "ticket_abono_apartado_#{sale.id}",
|
|
|
|
|
- template: "sales/receipt_partial_payment.pdf.erb",
|
|
|
|
|
- layout: 'receipt.html.erb',
|
|
|
|
|
- locals: { :sale => sale, :new_payments_quantity => quantity, :moves => new_moves },
|
|
|
|
|
- show_as_html: params.key?('debug'),
|
|
|
|
|
- page_width: '80mm',
|
|
|
|
|
- page_height: '300mm'
|
|
|
|
|
|
|
+ render pdf: "ticket_abono_apartado_#{sale.id}", template: "sales/receipt_partial_payment.pdf.erb", layout: 'receipt.html.erb', locals: { sale: sale, new_payments_quantity: quantity, moves: new_moves }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def print_credit_payment_receipt
|
|
def print_credit_payment_receipt
|
|
|
- #ticket para abonos a credito
|
|
|
|
|
|
|
+ # ticket para abonos a credito
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
sale = Sale.find(params[:sale_id])
|
|
sale = Sale.find(params[:sale_id])
|
|
|
deuda = params[:debts]
|
|
deuda = params[:debts]
|
|
|
- cash_move = CashRegistersMove.where(:sale_id => sale.id).last
|
|
|
|
|
|
|
+ cash_move = CashRegistersMove.where(sale_id: sale.id).last
|
|
|
quantity = cash_move.quantity
|
|
quantity = cash_move.quantity
|
|
|
- debt = Credit.where(:customer_id => sale.customer_id).sum(:rest)
|
|
|
|
|
|
|
+ debt = Credit.where(customer_id: sale.customer_id).sum(:rest)
|
|
|
|
|
|
|
|
format.pdf do
|
|
format.pdf do
|
|
|
- render pdf: "ticket_abono_credito_#{sale.id}",
|
|
|
|
|
- template: "sales/receipt_credit_payment.pdf.erb",
|
|
|
|
|
- layout: 'receipt.html.erb',
|
|
|
|
|
- locals: { :sale => sale, :new_payment => quantity, :debt => debt, :deuda => deuda, :move => cash_move },
|
|
|
|
|
- show_as_html: params.key?('debug'),
|
|
|
|
|
- page_width: '80mm',
|
|
|
|
|
- page_height: '300mm'
|
|
|
|
|
|
|
+ render pdf: "ticket_abono_credito_#{sale.id}", template: "sales/receipt_credit_payment.pdf.erb", layout: 'receipt.html.erb', locals: { sale: sale, new_payment: quantity, debt: debt, deuda: deuda, move: cash_move }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
@@ -417,7 +367,7 @@ class SalesController < ApplicationController
|
|
|
def create_haggle
|
|
def create_haggle
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
@pre_sale = PreSale.find(params[:pre_sale])
|
|
@pre_sale = PreSale.find(params[:pre_sale])
|
|
|
- @pre_sale.haggle = params[:haggle].to_f
|
|
|
|
|
|
|
+ @pre_sale.haggle = params[:haggle].to_f
|
|
|
@pre_sale.get_totals
|
|
@pre_sale.get_totals
|
|
|
if @pre_sale.save
|
|
if @pre_sale.save
|
|
|
format.js
|
|
format.js
|
|
@@ -428,38 +378,31 @@ class SalesController < ApplicationController
|
|
|
def find_sales_by_dates_or_code
|
|
def find_sales_by_dates_or_code
|
|
|
respond_to do |format|
|
|
respond_to do |format|
|
|
|
if params[:sale_code].present?
|
|
if params[:sale_code].present?
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.activas.where(:sale_code => params[:sale_code], :saletype => 1).order("id DESC")
|
|
|
|
|
|
|
+ @sales = Pointsale.find(current_user.pointsale_id).sales.activas.where(sale_code: params[:sale_code], saletype: 1).order("id DESC")
|
|
|
else
|
|
else
|
|
|
start_date = DateTime.parse(params[:start_date])
|
|
start_date = DateTime.parse(params[:start_date])
|
|
|
end_date = DateTime.parse(params[:end_date])
|
|
end_date = DateTime.parse(params[:end_date])
|
|
|
product_id = params[:product_id]
|
|
product_id = params[:product_id]
|
|
|
- if product_id.present?
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.activas.where(:date_sale => start_date..end_date, :saletype => 1).joins(:sales_details).where('sales_details.product_id = (?)', product_id).order("id DESC")
|
|
|
|
|
- else
|
|
|
|
|
- @sales = Pointsale.find(current_user.pointsale_id).sales.activas.where(:date_sale => start_date..end_date, :saletype => 1).joins(:sales_details).order("id DESC")
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ @sales = product_id.present? ? Pointsale.find(current_user.pointsale_id).sales.activas.where(date_sale: start_date..end_date, saletype: 1).joins(:sales_details).where('sales_details.product_id = (?)', product_id).order("id DESC") : Pointsale.find(current_user.pointsale_id).sales.activas.where(date_sale: start_date..end_date, saletype: 1).joins(:sales_details).order("id DESC")
|
|
|
end
|
|
end
|
|
|
format.js
|
|
format.js
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
private
|
|
private
|
|
|
- # Use callbacks to share common setup or constraints between actions.
|
|
|
|
|
- def set_sale
|
|
|
|
|
- @sale = Sale.find(params[:id])
|
|
|
|
|
- end
|
|
|
|
|
|
|
|
|
|
- def get_filters
|
|
|
|
|
- if params[:current_page].blank?
|
|
|
|
|
- @current_page = 1
|
|
|
|
|
- else
|
|
|
|
|
- @current_page = params[:current_page]
|
|
|
|
|
- end
|
|
|
|
|
- @filter = params[:filter]
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ # Use callbacks to share common setup or constraints between actions.
|
|
|
|
|
+ def set_sale
|
|
|
|
|
+ @sale = Sale.find(params[:id])
|
|
|
|
|
+ end
|
|
|
|
|
|
|
|
- # Never trust parameters from the scary internet, only allow the white list through.
|
|
|
|
|
- def sale_params
|
|
|
|
|
- params.require(:sale).permit(:customer_id, :saletype, :amount, :tax, :discount, :total, :date_sale, :user_id, :seller_id, :sale_code, :credit_note)
|
|
|
|
|
- end
|
|
|
|
|
|
|
+ def get_filters
|
|
|
|
|
+ @current_page = params[:current_page].blank? ? 1 : params[:filter]
|
|
|
|
|
+ @filter = params[:filter]
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ # Never trust parameters from the scary internet, only allow the white list through.
|
|
|
|
|
+ def sale_params
|
|
|
|
|
+ params.require(:sale).permit(:customer_id, :saletype, :amount, :tax, :discount, :total, :date_sale, :user_id, :seller_id, :sale_code, :credit_note)
|
|
|
end
|
|
end
|
|
|
|
|
+end
|