| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- class ProductWastesController < ApplicationController
- ##--- Abilities
- load_and_authorize_resource
- before_action :set_product_waste, only: [:show, :edit, :update, :destroy]
- ##--- Breadcrum_rails
- add_breadcrumb I18n.t("breadcrumbs." + controller_name), :product_wastes_path
- add_breadcrumb "Nueva merma de productos" , :new_product_waste_path, only: :new
- before_action :set_pos_config, only: [:show, :edit, :update, :destroy]
- # GET /product_wastes
- # GET /product_wastes.json
- def index
- if current_user.usertype == 'A'
- @product_wastes = ProductWaste.includes(:product, :user, :pointsale, :warehouse).activos
- elsif current_user.usertype == 'G'
- @product_wastes = ProductWaste.includes(:product, :user).where(:pointsale_id => current_user.pointsale_id).activos
- elsif current_user.usertype == 'S'
- @product_wastes = ProductWaste.includes(:product, :user).where(:warehouse_id => current_user.warehouse_id).activos
- end
- end
- # GET /product_wastes/new
- def new
- end
- # POST /product_wastes
- # POST /product_wastes.json
- def create
- respond_to do |format|
- @product_waste = ProductWaste.new(product_waste_params)
- @product_waste.user_id = current_user.id
- @product_waste.status = :active
- if current_user.usertype == 'S'
- @product_waste.warehouse_id = current_user.warehouse_id
- @stock = WarehouseStock.find_by(:warehouse_id => @product_waste.warehouse_id,
- :product_id => @product_waste.product_id)
- else
- @product_waste.pointsale_id = current_user.pointsale_id
- @stock = AvailableProduct.find_by(:pointsale_id => @product_waste.pointsale_id,
- :product_id => @product_waste.product_id)
- end
- if @stock.stock >= @product_waste.quantity
- @product_waste.audit_comment = "Merma del producto #{@product_waste.product.name} creada"
- if @product_waste.save
- @stock.stock -= @product_waste.quantity
- @stock.save
- format.js
- else
- format.json { render json: @product_waste.errors.values, status: :unprocessable_entity }
- end
- else
- @product_waste.errors.add(:base, "Stock insuficiente, solo se cuenta con #{@stock.stock} unidades del producto #{@product_waste.product.name}")
- format.json { render json: @product_waste.errors.values, status: :unprocessable_entity }
- end
- end
- end
- # PATCH/PUT /product_wastes/1
- # PATCH/PUT /product_wastes/1.json
- def update
- respond_to do |format|
- if @product_waste.update(product_waste_params)
- format.html { redirect_to @product_waste, notice: 'Product waste was successfully updated.' }
- format.json { render :show, status: :ok, location: @product_waste }
- else
- format.html { render :edit }
- format.json { render json: @product_waste.errors, status: :unprocessable_entity }
- end
- end
- end
- # DELETE /product_wastes/1
- # DELETE /product_wastes/1.json
- def destroy
- respond_to do |format|
- @product_waste.audit_comment = "Merma del producto #{@product_waste.product.name} eliminada."
- if @product_waste.update_attributes(:status => :inactive)
- if current_user.usertype == "S"
- @stock = WarehouseStock.find_by(:warehouse_id => @product_waste.warehouse_id,
- :product_id => @product_waste.product_id)
- else
- @stock = AvailableProduct.find_by(:pointsale_id => @product_waste.pointsale_id,
- :product_id => @product_waste.product_id)
- end
- @stock.stock = @stock.stock + @product_waste.quantity
- @stock.save
- format.html { redirect_to product_wastes_url, warning: 'Merma de producto eliminada.' }
- format.json { head :ok }
- else
- format.json { render json: @product_waste.errors, status: :unprocessable_entity }
- end
- end
- end
- private
- # Use callbacks to share common setup or constraints between actions.
- def set_product_waste
- @product_waste = ProductWaste.find(params[:id])
- end
- # Never trust parameters from the scary internet, only allow the white list through.
- def product_waste_params
- params.require(:product_waste).permit(:warehouse_id, :pointsale_id, :product_id, :quantity, :reason, :status)
- end
- end
|