jose miguel 7 年之前
父節點
當前提交
6e3a8d24df

+ 8 - 26
app/controllers/cash_outs_controller.rb

@@ -79,20 +79,6 @@ class CashOutsController < ApplicationController
     end
   end
 
-  # PATCH/PUT /cash_outs/1
-  # PATCH/PUT /cash_outs/1.json
-  def update
-    respond_to do |format|
-      if @cash_out.update(cash_out_params)
-        format.html { redirect_to @cash_out, notice: 'Cash out was successfully updated.' }
-        format.json { render :show, status: :ok, location: @cash_out }
-      else
-        format.html { render :edit }
-        format.json { render json: @cash_out.errors, status: :unprocessable_entity }
-      end
-    end
-  end
-
   def get_open_cash_registers
     respond_to do |format|
       format.js
@@ -110,21 +96,17 @@ class CashOutsController < ApplicationController
     end
   end
 
-  # DELETE /cash_outs/1
-  # DELETE /cash_outs/1.json
-  def destroy
-    @cash_out.destroy
-    respond_to do |format|
-      format.html { redirect_to cash_outs_url, notice: 'Cash out was successfully destroyed.' }
-      format.json { head :no_content }
+  def find_cash_outs_by_date
+    if params[:begin_date] != "null" && params[:end_date] != "null"
+      start_date = params[:begin_date].in_time_zone(Time.zone).beginning_of_day + 1.days
+      end_date = params[:end_date].in_time_zone(Time.zone).end_of_day + 1.days
+    else
+      start_date = DateTime.now
+      end_date = DateTime.now
     end
-  end
 
-  def find_cash_outs_by_date
+    @cash_outs = params[:pointsale_id] != "null" ? Pointsale.find(params[:pointsale_id]).cash_outs.includes(:open_cash_register, :user, :received_by).where(created_at: start_date..end_date).order(" id DESC ") : CashOut.all.includes(:open_cash_register, :user, :received_by).where(created_at: start_date..end_date).order('cash_outs.created_at desc')
     respond_to do |format|
-      start_date = DateTime.parse(params[:begin_date]).in_time_zone(Time.zone).beginning_of_day + 1.days
-      end_date = DateTime.parse(params[:end_date]).in_time_zone(Time.zone).end_of_day + 1.days
-      @cash_outs = Pointsale.find(params[:pointsale_id]).cash_outs.includes(:open_cash_register, :user, :received_by).where(created_at: start_date..end_date).order(" id DESC ")
       format.js
     end
   end

+ 0 - 3
app/controllers/special_prices_controller.rb

@@ -3,10 +3,7 @@ class SpecialPricesController < ApplicationController
   load_and_authorize_resource
 
   ##--- Breadcrum_rails
-  add_breadcrumb I18n.t("breadcrumbs." + controller_name), :special_prices_path
   add_breadcrumb "Nuevo precio(s) especial", :new_special_price_path, only: :new
-  add_breadcrumb "Detalle de precio(s) especial", :special_price_path, only: :show
-  add_breadcrumb "Editar precio(s) especial", :edit_special_price_path, only: :edit
 
   before_action :set_special_price, only: [:show, :edit, :update, :destroy]
 

+ 94 - 112
app/controllers/transfers_controller.rb

@@ -15,14 +15,18 @@ class TransfersController < ApplicationController
   # GET /transfers
   # GET /transfers.json
   def index
-    if current_user.usertype == 'A'
-      @transfers = Transfer.all.includes(:user, :received_by).order('id DESC, transfer_date DESC')
-    elsif current_user.usertype == 'G' || current_user.usertype == 'C'
-      @received = Transfer.includes(:user, :received_by).where(destiny_id: current_user.pointsale_id, destiny_is_pointsale: 1).order('id DESC, transfer_date DESC')
-      @sent = Transfer.includes(:user, :received_by).where(origin_id: current_user.pointsale_id, origin_is_pointsale: 1).order('id DESC, transfer_date DESC')
-    elsif current_user.usertype == 'S'
-      @received = Transfer.includes(:user, :received_by).where(destiny_id: current_user.warehouse_id, destiny_is_pointsale: 0).order('id DESC, transfer_date DESC')
-      @sent = Transfer.includes(:user, :received_by).where(origin_id: current_user.warehouse_id, origin_is_pointsale: 0).order('id DESC, transfer_date DESC')
+    @transfers = Transfer.includes(:user, :received_by, :transfer_details).all.order('id DESC, transfer_date DESC')
+    unless current_user.usertype == "A"
+      is_destiny =
+        if current_user.usertype == "S"
+          id_filter = current_user.warehouse_id
+          0
+        else
+          id_filter = current_user.pointsale_id
+          1
+        end
+      @received = @transfers.where(destiny_id: id_filter, destiny_is_pointsale: is_destiny).order('id DESC, transfer_date DESC')
+      @sent = @transfers.where(origin_id: id_filter, origin_is_pointsale: is_destiny).order('id DESC, transfer_date DESC')
     end
   end
 
@@ -31,30 +35,10 @@ class TransfersController < ApplicationController
   def show; end
 
   # GET /transfers/new
-  # rubocop:disable Style/ZeroLengthPredicate
   def new
     @transfer = Transfer.new
-    @destiny_pointsales = Pointsale.activos.ignore_current(current_user.pointsale_id)
-    @pre_transfers = PreTransfer.where(user_id: current_user.id)
-    @disable_origin = false
-    @disable_destiny = false
-    @disabled_button = true
-    if @pre_transfers.size > 0
-      @origin_id = @pre_transfers[0].origin_is_pointsale == 1 ? "P-#{@pre_transfers[0].origin_id}" : "W-#{@pre_transfers[0].origin_id}"
-      @destiny_id = @pre_transfers[0].destiny_is_pointsale == 1 ? "P-#{@pre_transfers[0].destiny_id}" : "W-#{@pre_transfers[0].destiny_id}"
-      @disable_origin = true
-      @disable_destiny = true
-      @disabled_button = false
-    end
-    if current_user.usertype == "G" || current_user.usertype == "C"
-      @origin_id = "P-#{current_user.pointsale_id}"
-      @disable_origin = true
-    elsif current_user.usertype == "S"
-      @origin_id = "W-#{current_user.warehouse_id}"
-      @disable_origin = true
-    end
+    set_transfer_data(nil)
   end
-  # rubocop:enble Style/ZeroLengthPredicate
 
   # GET /transfers/1/edit
   def edit; end
@@ -71,44 +55,27 @@ class TransfersController < ApplicationController
     @transfer.origin_id = params[:transfer][:origin_id][2, params[:transfer][:origin_id].length]
     @transfer.destiny_id = params[:transfer][:destiny_id][2, params[:transfer][:destiny_id].length]
 
+    pre_transfers.each do |pre|
+      detail = TransferDetail.new(transfer_id: @transfer.id, product_id: pre.product_id, quantity: pre.quantity, adjustment: pre.quantity, status: "pending")
+      @transfer.transfer_details << detail
+    end
     respond_to do |format|
-      @transfer.audit_comment = "Traspaso de #{@transfer.origin_is_pointsale? ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name} a #{@transfer.destiny_is_pointsale? ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name} creado."
+      origin_pointsale_name = @transfer.origin_is_pointsale? ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name
+      destiny_pointsale_name = @transfer.destiny_is_pointsale? ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name
+      @transfer.audit_comment = "Traspaso de #{origin_pointsale_name} a #{destiny_pointsale_name} creado."
       if @transfer.save
-        pre_transfers.each do |pre|
-          detail = TransferDetail.new
-          detail.transfer_id = @transfer.id
-          detail.product_id = pre.product_id
-          detail.quantity = pre.quantity
-          detail.adjustment = pre.quantity
-          detail.status = "pending"
-          @transfer.transfer_details << detail
-          pre.destroy
-        end
-
-        message = "Traspaso creado al " + (@transfer.destiny_is_pointsale == 1 ? "punto de venta #{Pointsale.find(@transfer.destiny_id).name}" : "almacén #{Warehouse.find(@transfer.destiny_id).name}")
+        pre_transfers.destroy_all
+        message = "Traspaso creado al " + (@transfer.destiny_is_pointsale? ? "punto de venta #{destiny_pointsale_name}" : "almacén #{destiny_pointsale_name}")
         format.html { redirect_to transfers_path, success: message }
         format.json { render :show, status: :created, location: @transfer }
       else
+        set_transfer_data(params)
         format.html { render :new }
         format.json { render json: @transfer.errors, status: :unprocessable_entity }
       end
     end
   end
 
-  # PATCH/PUT /transfers/1
-  # PATCH/PUT /transfers/1.json
-  def update
-    respond_to do |format|
-      if @transfer.update(transfer_params)
-        format.html { redirect_to @transfer, notice: 'Transfer was successfully updated.' }
-        format.json { render :show, status: :ok, location: @transfer }
-      else
-        format.html { render :edit }
-        format.json { render json: @transfer.errors, status: :unprocessable_entity }
-      end
-    end
-  end
-
   # DELETE /transfers/1
   # DELETE /transfers/1.json
   def destroy
@@ -149,81 +116,96 @@ class TransfersController < ApplicationController
     end
   end
 
-  # rubocop:disable Metrics/BlockLength
   def accept_transfer
-    respond_to do |format|
-      @transfer = Transfer.find(params[:transfer_id])
-      @transfer.observations = params[:transfer][:observations]
-      @transfer.received_by_id = current_user.id
-      @transfer.status = :received
-      @transfer.reception_date = Date.today
-      @transfer.audit_comment = "Se dio entrada a traspaso de #{@transfer.origin_is_pointsale? ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name} a #{@transfer.destiny_is_pointsale? ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name}"
-      @transfer.save
-      @transfer.transfer_details.each do |detail|
-        if @transfer.destiny_is_pointsale == 1
-          stock_product = AvailableProduct.find_by(product_id: detail.product_id, pointsale_id: @transfer.destiny_id)
-          if stock_product.present?
-            stock_product.stock = 0 if stock_product.stock.blank?
-            stock_product.stock += detail.adjustment
-          else
-            stock_product = AvailableProduct.new
-            stock_product.product_id = detail.product_id
-            stock_product.pointsale_id = @transfer.destiny_id
-            stock_product.stock = detail.adjustment
-          end
+    @transfer = Transfer.find(params[:transfer_id])
+    @transfer.observations = params[:transfer][:observations]
+    @transfer.received_by_id = current_user.id
+    @transfer.status = :received
+    @transfer.reception_date = Date.today
+    @transfer.audit_comment = "Se dio entrada a traspaso de #{@transfer.origin_is_pointsale? ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name} a #{@transfer.destiny_is_pointsale? ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name}"
+    @transfer.save
+    @transfer.transfer_details.each do |detail|
+      if @transfer.destiny_is_pointsale == 1
+        stock_product = AvailableProduct.find_by(product_id: detail.product_id, pointsale_id: @transfer.destiny_id)
+        if stock_product.present?
+          stock_product.stock = 0 if stock_product.stock.blank?
+          stock_product.stock += detail.adjustment
         else
-          # actualizar stock del producto cuando es para almacen
-          stock_product = WarehouseStock.find_by(product_id: detail.product_id, warehouse_id: @transfer.destiny_id)
-          if stock_product.present?
-            stock_product.stock = 0 if stock_product.stock.blank?
-            stock_product.stock += detail.adjustment
-          else
-            stock_product = WarehouseStock.new
-            stock_product.product_id = detail.product_id
-            stock_product.warehouse_id = @transfer.destiny_id
-            stock_product.stock = detail.adjustment
-          end
+          stock_product = AvailableProduct.new(product_id: detail.product_id, pointsale_id: @transfer.destiny_id, stock: detail.adjustment)
+        end
+      else
+        # actualizar stock del producto cuando es para almacen
+        stock_product = WarehouseStock.find_by(product_id: detail.product_id, warehouse_id: @transfer.destiny_id)
+        if stock_product.present?
+          stock_product.stock = 0 if stock_product.stock.blank?
+          stock_product.stock += detail.adjustment
+        else
+          stock_product = WarehouseStock.new(product_id: detail.product_id, warehouse_id: @transfer.destiny_id, stock: detail.adjustment)
         end
-        stock_product.save
-
-        # guardar en bitacora de inventario
-        move = InventoriesMove.new
-        move.product_id = detail.product_id
-        move.quantity = detail.adjustment
-        move.transfer_id = @transfer.id
-        move.move_type = "incoming"
-        move.reason = "transfer"
-        move.save
       end
+      stock_product.save
+
+      # guardar en bitacora de inventario
+      move = InventoriesMove.new(product_id: detail.product_id, quantity: detail.adjustment, transfer_id: @transfer.id, move_type: "incoming", reason: "transfer")
+      move.save
+    end
+    respond_to do |format|
       format.js { flash[:success] = "Traspaso realizado correctamente." }
     end
   end
-  # rubocop:enable Metrics/BlockLength
 
-  # rubocop:disable Style/ConditionalAssignment
   def print_receipt
-    respond_to do |format|
-      @transfer = Transfer.find(params[:transfer_id])
-      origin = @transfer.origin_is_pointsale == 1 ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name
-      destiny = @transfer.destiny_is_pointsale == 1 ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name
-      with_looses = @transfer.transfer_details.where(has_looses: 1).count
-      with_surplus = @transfer.transfer_details.where(has_surplus: 1).count
+    @transfer = Transfer.find(params[:transfer_id])
+    origin = @transfer.origin_is_pointsale == 1 ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name
+    destiny = @transfer.destiny_is_pointsale == 1 ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name
+    with_looses = @transfer.transfer_details.where(has_looses: 1).count
+    with_surplus = @transfer.transfer_details.where(has_surplus: 1).count
+    reception_status =
       if with_looses > 0 && with_surplus.zero?
-        reception_status = 'CON PERDIDAS'
+        'CON PERDIDAS'
       elsif with_surplus > 0 && with_looses.zero?
-        reception_status = 'CON EXCEDENTE'
+        'CON EXCEDENTE'
       elsif with_surplus > 0 && with_looses > 0
-        reception_status = 'CON INCONSISTENCIAS'
+        'CON INCONSISTENCIAS'
       else
-        reception_status = 'TRASPASO COMPLETO'
+        'TRASPASO COMPLETO'
       end
-
+    respond_to do |format|
       format.pdf do
         render pdf: "traspaso_#{@transfer.id}", template: "transfers/receipt.pdf.erb", layout: 'receipt.html.erb', locals: { transfer: @transfer, reception_status: reception_status, origin: origin, destiny: destiny }, show_as_html: params.key?('debug'), page_width: '80mm', page_height: '300mm'
       end
     end
   end
-  # rubocop:enable Style/ConditionalAssignment
+
+  def set_transfer_data(params)
+    @destiny_pointsales = Pointsale.activos.ignore_current(current_user.pointsale_id)
+    @pre_transfers = PreTransfer.where(user_id: current_user.id)
+    @disable_origin = false
+    @disable_destiny = false
+    # reestablecer origen y destino
+    if @pre_transfers.present?
+      @origin_id = @pre_transfers[0].origin_is_pointsale? ? "P-#{@pre_transfers[0].origin_id}" : "W-#{@pre_transfers[0].origin_id}"
+      @destiny_id = @pre_transfers[0].destiny_is_pointsale? ? "P-#{@pre_transfers[0].destiny_id}" : "W-#{@pre_transfers[0].destiny_id}"
+      @disable_origin = true
+      @disable_destiny = true
+    elsif params.present?
+      @origin_id = params[:transfer][:origin_id]
+      @destiny_id = params[:transfer][:destiny_id]
+    end
+
+    if current_user.usertype == "G" || current_user.usertype == "C"
+      @origin_id = "P-#{current_user.pointsale_id}"
+      @disable_origin = true
+    elsif current_user.usertype == "S"
+      @origin_id = "W-#{current_user.warehouse_id}"
+      @disable_origin = true
+    end
+
+    if @origin_id == @destiny_id
+      @disable_origin = false
+      @disable_destiny = false
+    end
+  end
 
   private
 

+ 36 - 0
app/helpers/transfers_helper.rb

@@ -1,2 +1,38 @@
 module TransfersHelper
+  def transfer_status(transfer)
+    case transfer.status
+    when "cancelled" then
+      content_tag(:span, "CANCELADO", class: "label label-danger", style: "font-size:85%")
+    when "pending" then
+      content_tag(:span, "PENDIENTE DE RECEPCIÓN", class: "label label-warning", style: "font-size:85%")
+    when "received" then
+      content_tag(:span, "RECIBIDO", class: "label label-info", style: "font-size:85%")
+    end
+  end
+
+  def transfer_details(transfer)
+    transfer_detail = transfer.transfer_details
+    has_looses = transfer_detail.where(has_looses: true)
+    has_surplus = transfer_detail.where(has_surplus: true)
+
+    if !has_looses.blank? && has_surplus.blank? # has loses but not surplus
+      content_tag(:span, "CON PÉRDIDAS", class: "label label-warning", style: "font-size:85%")
+    elsif !has_surplus.blank? && has_looses.blank? # has surplus but not loses
+      content_tag(:span, "CON EXCEDENTE", class: "label label-warning", style: "font-size:85%")
+    elsif !has_surplus.blank? && !has_looses.blank? # has surplus and loses
+      content_tag(:span, "CON INCONSISTENCIAS", class: "label label-danger", style: "font-size:85%")
+    elsif transfer.received?
+      content_tag(:i, "", class: "fa fa-check fa-2 font-green")
+    end
+  end
+
+  def transfer_details_status(detail)
+    if detail.has_looses?
+      content_tag(:span, "Con pérdidas", class: "label label-warning", style: "font-size:85%")
+    elsif detail.has_surplus?
+      content_tag(:span, "Con excedente", class: "label label-warning", style: "font-size:85%")
+    else
+      content_tag(:i, "", class: "fa fa-check fa-2 font-green")
+    end
+  end
 end

+ 1 - 1
app/models/pre_transfer.rb

@@ -4,5 +4,5 @@ class PreTransfer < ActiveRecord::Base
 
 	validates_presence_of :destiny_id, message: "Debe indicar el destino del traspaso."
 	validates_presence_of :product_id, message: "Debe indicar producto a traspasar."
-
+  validates_numericality_of :quantity, greater_than: 0, message: "La cantidad de productos a traspasar debe ser mayor a 0"
 end

+ 15 - 11
app/models/transfer.rb

@@ -1,14 +1,13 @@
 class Transfer < ActiveRecord::Base
-
 	audited
 
-	belongs_to :origin, :class_name => 'Pointsale'
-	belongs_to :destiny, :class_name => 'Pointsale'
-	belongs_to :user, :class_name => 'User'
-	belongs_to :received_by, :class_name => 'User'
+	belongs_to :origin, class_name: 'Pointsale'
+	belongs_to :destiny, class_name: 'Pointsale'
+	belongs_to :user, class_name: 'User'
+	belongs_to :received_by, class_name: 'User'
 
-    has_many :transfer_details
-  	has_many :products, :through => :transfer_details
+  has_many :transfer_details
+	has_many :products, through: :transfer_details
 	has_many :inventories_moves
 
 	enum status: [:cancelled, :pending, :received]
@@ -16,10 +15,15 @@ class Transfer < ActiveRecord::Base
 	accepts_nested_attributes_for :transfer_details
 
 	validates_associated :transfer_details
-	validates :origin_id, presence: { message: "Debe indicar origen del traspaso." }, :on => [:create, :update]
-	validates :destiny_id, presence: { message: "Debe indicar destino del traspaso." }, :on => [:create, :update]
-	validates :received_by_id, presence: { message: "Debe indicar quien recibió el traspaso." }, :on => [:update]
+	validates :origin_id, presence: { message: "Debe indicar origen del traspaso." }, on: [:create, :update]
+	validates :destiny_id, presence: { message: "Debe indicar destino del traspaso." }, on: [:create, :update]
+	validates :received_by_id, presence: { message: "Debe indicar quien recibió el traspaso." }, on: [:update]
+	validate :require_products, on: :create
 
-	scope :activos, -> { where("status = 1") }
+	scope :activos, -> { where(status: 1) }
 
+	private
+	def require_products
+		errors.add(:base, "Debe seleccionar al menos un producto") if transfer_details.size == 0
+	end
 end

+ 38 - 33
app/views/cash_outs/index.html.erb

@@ -44,16 +44,15 @@
                     <span class="caption-subject bold uppercase">Lista de cortes de caja</span>
                   </div>
                    <div class="actions">
-                     <% if current_user.usertype == "G" %>
-                        <% if can? :create, CashOut %>
-                          <%= link_to new_open_cash_register_path, :remote => true, :class => 'btn btn bold green margin-top pull-right', :title => "Abrir caja registradora" do %> Abrir caja <i class="fa fa-plus"></i>
-                          <% end %> <br>
-                          <%= link_to get_open_cash_registers_path, remote: true, data: { toggle: "modal", target: "#get_open_cash_register" }, :class=>"btn bold green pull-right", :title=>"Realizar corte de caja", :style=> "margin-top:10px"  do %> Realizar corte de caja <i class="fa fa-plus"></i>
-                          <% end %>
+                    <% if current_user.usertype == "G" %>
+                      <% if can? :create, CashOut %>
+                        <%= link_to new_open_cash_register_path, :remote => true, :class => 'btn btn bold green margin-top pull-right', :title => "Abrir caja registradora" do %> Abrir caja <i class="fa fa-plus"></i><% end %> <br>
+                        <%= link_to get_open_cash_registers_path, remote: true, data: { toggle: "modal", target: "#get_open_cash_register" }, :class=>"btn bold green pull-right", :title=>"Realizar corte de caja", :style=> "margin-top:10px"  do %> Realizar corte de caja <i class="fa fa-plus"></i>
                         <% end %>
-                     <% end %>
-                     <% if current_user.usertype == "A" %>
-                        <%= link_to opened_cash_registers_path, {:class=>"btn bold green pull-right"} do %> <i class="fa fa-search"></i>&nbsp Ver cajas abiertas <% end %>
+                      <% end %>
+                    <% end %>
+                    <% if current_user.usertype == "A" %>
+                      <%= link_to opened_cash_registers_path, {:class=>"btn bold green pull-right"} do %> <i class="fa fa-search"></i>&nbsp Ver cajas abiertas <% end %>
                     <% end %>
                   </div>
                 </div>
@@ -71,22 +70,22 @@
                             <%= label_tag :begin_date, "Fecha", {:class=>"col-md-1 control-label"} do %> Desde
                             <% end %>
                             <div class="col-sm-2" style="padding-left:0px;padding-right:0px;">
-                                <div class='input-group date' id='begin_date'>
-                                    <input id="start" type='text' class="form-control"/>
-                                    <span class="input-group-addon">
-                                        <span class="glyphicon glyphicon-calendar"></span>
-                                    </span>
-                                </div>
+                              <div class='input-group date' id='begin_date'>
+                                <input id="start" type='text' class="form-control" value="<%= l(Date.today.beginning_of_month, format: '%d/%m/%Y') %>" />
+                                  <span class="input-group-addon">
+                                    <span class="glyphicon glyphicon-calendar"></span>
+                                  </span>
+                              </div>
                             </div>
                             <%= label_tag :end_date, "Fecha", {:class=>"col-md-1 control-label"} do %> Hasta
                             <% end %>
                             <div class="col-sm-2" style="padding-left:0px;padding-right:0px;">
-                                <div class='input-group date' id='end_date'>
-                                    <input id="end" type='text' class="form-control"/>
-                                    <span class="input-group-addon">
-                                        <span class="glyphicon glyphicon-calendar"></span>
-                                    </span>
-                                </div>
+                              <div class='input-group date' id='end_date'>
+                                <input id="end" type='text' class="form-control" value="<%= l(Date.today.end_of_month, format: '%d/%m/%Y') %>" />
+                                  <span class="input-group-addon">
+                                    <span class="glyphicon glyphicon-calendar"></span>
+                                  </span>
+                              </div>
                             </div>
                             <button class="btn btn-icon-only blue pull-right" onclick="cashOutByPointsaleDate()">
                               <i class="fa fa-search"></i>
@@ -134,11 +133,9 @@
                           <%= link_to cash_out, {:class=>"btn btn-icon-only default filtros", :title=>"Ver corte de caja"} do %>
                             <i class="fa fa-search"></i>
                           <% end %>
-
                           <%= link_to print_cash_out_receipt_path(cash_out.id, format: 'pdf'), {:class=>"btn btn-icon-only default", :target => "blank"} do %>
                             <i class="fa fa-print"></i>
                           <% end %>
-
                         </td>
                       </tr>
                       <% end %>
@@ -159,15 +156,15 @@
 </div>
 <script>
   $(document).on("page:change", function() {
-     $('#begin_date').datetimepicker({
+    $('#start').datetimepicker({
       icons: {
         date: "fa fa-calendar"
       },
       format: "DD/MM/YYYY",
       defaultDate: moment().startOf('month').toDate()
-     });
+    });
 
-    $('#end_date').datetimepicker({
+    $('#end').datetimepicker({
       icons: {
         date: "fa fa-calendar"
       },
@@ -177,21 +174,29 @@
   });
 
   function cashOutByPointsaleDate() {
-    var start = moment($("#begin_date").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD');
-    var end = moment($("#end_date").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD');
+    if ($("#start").val() && $("#end").val()) {
+      var start = moment($("#start").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD HH:mm:ss');
+      var end = moment($("#end").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD HH:mm:ss');
+    } else {
+      var start = null;
+      var end = null;
+    }
     var pointsale = $('#pointsale').val();
+    if(pointsale == ""){
+      pointsale = null;
+    }
     App.blockUI({
-         target: $("#cash_outs_table"),
-         animate: true
+      target: $("#cash_outs_table"),
+      animate: true
     });
     $.ajax({
       type: "get",
       url:  '/find_cash_outs_by_date/' + pointsale + '/' + start + '/' + end,
       dataType: 'script',
       success: function(data) {
-          window.setTimeout(function() {
-            App.unblockUI($("#cash_outs_table"));
-          }, 100);
+        window.setTimeout(function() {
+          App.unblockUI($("#cash_outs_table"));
+        }, 100);
       }
     });
   }

+ 10 - 10
app/views/cash_registers_moves/_abonoform.html.erb

@@ -1,6 +1,6 @@
-<%= form_for(@cash_registers_move, :remote => true, :html => {:class=>"form-horizontal", :id=> "cash_register_move_form"}) do |f| %>
-  <%= f.hidden_field(:open_cash_register_id, :value => @sale.open_cash_register_id) %>
-  <%= f.hidden_field(:sale_id, :value => @sale.id) %>
+<%= form_for(@cash_registers_move, remote: true, html: { class: "form-horizontal", id: "cash_register_move_form" }) do |f| %>
+  <%= f.hidden_field(:open_cash_register_id, value: @sale.open_cash_register_id) %>
+  <%= f.hidden_field(:sale_id, value: @sale.id) %>
   <div class="portlet-body form">
     <div class="alert alert-danger hidden" id="error_explanation_move"></div>
     <div class="row">
@@ -38,7 +38,7 @@
               <span class="help-block">monto recibido. </span>
               <div class="input-group col-md-11">
                 <span class="input-group-addon"> $ </span>
-                <%= f.number_field :received, {:class=>"form-control mask_decimal first_input", :oninput=> 'lock_button()'} %>
+                <%= f.number_field :received, { class: "form-control mask_decimal first_input", oninput: 'lock_button()' } %>
               </div>
             </div>
           </div>
@@ -48,7 +48,7 @@
               <span class="help-block">monto a ABONAR. </span>
               <div class="input-group col-md-11">
                 <span class="input-group-addon"> $ </span>
-                <%= f.number_field :quantity, {:class=>"form-control mask_decimal", :oninput => 'lock_button()'} %>
+                <%= f.number_field :quantity, { class: "form-control mask_decimal", oninput: 'lock_button()' } %>
               </div>
             </div>
           </div>
@@ -57,7 +57,7 @@
             <div class="form-group">
               <span class="help-block">forma de pago. </span>
               <div class="input-group col-md-12">
-                <%= f.select :payment_method_id, PaymentMethod.vigentes.map {|c| [c.method, c.id] }, {:include_blank => "Seleccione", :selected => @cash_id}, {:class => "form-control" }   %>
+                <%= f.select :payment_method_id, PaymentMethod.vigentes.map { |c| [c.method, c.id] }, {:include_blank => "Seleccione", :selected => @cash_id}, { class: "form-control" } %>
               </div>
             </div>
           </div>
@@ -69,11 +69,11 @@
         <!--  datos de la tarjeta cuando aplica -->
         <div class="col-md-12" id="card_info" style="display: none;">
           <div class="form-group">
-            <%= f.label :cardnumber,  {:class=>"col-md-3 control-label "} do %> Tarjeta: <span class="required">*</span>
+            <%= f.label :cardnumber, { class: "col-md-3 control-label" } do %> Tarjeta: <span class="required">*</span>
             <% end %>
             <div class="col-md-8">
-                <%= f.text_field :cardnumber, {:class => "form-control"}  %>
-                <span class="help-block">Ultimos 4 digitos de la tarjeta. </span>
+              <%= f.text_field :cardnumber, { class: "form-control", maxlength: 4 } %>
+              <span class="help-block">Últimos 4 dígitos de la tarjeta. </span>
             </div>
           </div>
         </div>
@@ -90,7 +90,7 @@
         </div>
       </div>
       <div class="col-md-12">
-        <button type="button" class="btn green btn-block" disabled id="save_move" onclick="submitForm()">Abonar a credito</button>
+        <button type="button" class="btn green btn-block" disabled id="save_move" onclick="submitForm()">Abonar a crédito</button>
       </div>
     </div>
   </div>

+ 32 - 21
app/views/cash_registers_moves/_form_liquidate_reserved_sale.html.erb

@@ -90,7 +90,7 @@
             <div class="form-group">
               <span class="help-block">forma de pago. </span>
               <div class="input-group col-md-12">
-                <%= f.select :payment_method_id, PaymentMethod.vigentes.map {|c| [c.method, c.id] }, {:include_blank => "Seleccione", :selected => @cash_id}, {:class => "form-control" }   %>
+                <%= f.select :payment_method_id, PaymentMethod.vigentes.map { |c| [c.method, c.id] }, {:include_blank => "Seleccione", :selected => @cash_id}, {:class => "form-control" }   %>
               </div>
             </div>
           </div>
@@ -100,30 +100,30 @@
           </div>
         </div>
         <!--  datos de la tarjeta cuando aplica -->
-        <div class="col-md-12" id="card_info" style="display: none;">
+        <div class="col-md-offset-6 col-md-6" id="card_info" style="display: none;">
           <div class="form-group">
-            <%= f.label :cardnumber,  {:class=>"col-md-3 control-label "} do %> Tarjeta: <span class="required">*</span>
+            <%= f.label :cardnumber, {:class=>"col-md-2 control-label "} do %> Tarjeta: <span class="required">*</span>
             <% end %>
-            <div class="col-md-8">
-                <%= f.text_field :cardnumber, {:class => "form-control"}  %>
-                <span class="help-block">Ultimos 4 digitos de la tarjeta. </span>
+            <div class="col-md-6">
+              <%= f.text_field :cardnumber, { class: "form-control input-small", maxlength: 4 } %>
+              <span class="help-block">Últimos 4 dígitos de la tarjeta. </span>
             </div>
           </div>
         </div>
       </div>
       <div class="col-md-12">
         <table class="table table-striped table-hover table-bordered" id="payments_table">
-            <thead>
-                <tr>
-                    <th> Recibido </th>
-                    <th> Cobro </th>
-                    <th> Forma de pago </th>
-                    <th> Info. adicional </th>
-                    <th> Acciones </th>
-                </tr>
-            </thead>
-            <tbody>
-            </tbody>
+          <thead>
+            <tr>
+              <th> Recibido </th>
+              <th> Cobro </th>
+              <th> Forma de pago </th>
+              <th> Info. adicional </th>
+              <th> Acciones </th>
+            </tr>
+          </thead>
+          <tbody>
+          </tbody>
         </table>
       </div>
       <!-- div para mostrar cambio -->
@@ -138,20 +138,20 @@
         </div>
       </div>
       <div class="col-md-12">
-       <span class="help-block">Este boton se habilita cuando se registre un pago. </span>
+       <span class="help-block">Este botón se habilita cuando se registre un pago. </span>
         <button type="button" class="btn green btn-block" disabled id="save_move" onclick="saveMoves()">Aceptar</button>
       </div>
     </div>
   </div>
 <% end %>
 <script type="text/javascript">
-   $('#datetimepicker2').datetimepicker({
+  $('#datetimepicker2').datetimepicker({
     icons: {
       date: "fa fa-calendar"
     },
     format: "DD/MM/YYYY",
     defaultDate: new Date()
-   });
+  });
 
   $('#cash_registers_move_payment_method_id').on('change', function() {
     if ($(this).val() != <%= @cash_id %>) {
@@ -171,7 +171,18 @@
   });
 
   function addRow() {
-    $('#cash_register_move_form').submit();
+    debt = parseFloat($('#reserve_debt').val());
+    quantity = parseFloat($('#cash_registers_move_quantity').val());
+    received = parseFloat($('#cash_registers_move_received').val());
+    payment_method = $('#cash_registers_move_payment_method_id option:selected').val();
+
+    if (((quantity <= debt && quantity > 0) && (received >= quantity && payment_method == "2")) || (payment_method == "1" && quantity > 0) ) {
+      $('#cash_register_move_form').submit();
+    } else if (quantity > debt || quantity == 0) {
+      toastr["error"]("El monto a abonar no puede ser mayor al adeudo, ni puede ir en ceros");
+    } else if ((received <= 0 || quantity > received) && payment_method == "2") {
+      toastr["error"]("La cantidad recibida no puede ir en ceros, ni se puede abonar más de lo recibido");
+    }
   }
 
   function deleteCashMove(input) {

+ 31 - 25
app/views/cash_registers_moves/_form_sale_reserve.html.erb

@@ -1,6 +1,6 @@
-<%= form_for(@cash_registers_move, :remote => true, :html => {:class=>"form-horizontal", :id=> "cash_register_move_form"}) do |f| %>
-  <%= f.hidden_field(:open_cash_register_id, :value => @sale.open_cash_register_id) %>
-  <%= f.hidden_field(:sale_id, :value => @sale.id) %>
+<%= form_for(@cash_registers_move, remote: true, html: { class: "form-horizontal", id: "cash_register_move_form" }) do |f| %>
+  <%= f.hidden_field(:open_cash_register_id, value: @sale.open_cash_register_id) %>
+  <%= f.hidden_field(:sale_id, value: @sale.id) %>
   <%= hidden_field_tag :reserve_sale_percent, @min_quantity_reserve %>
   <div class="portlet-body form">
     <div class="alert alert-danger hidden" id="error_explanation_move"></div>
@@ -52,7 +52,7 @@
             <span class="help-block">monto recibido. </span>
             <div class="input-group col-md-11">
               <span class="input-group-addon"> $ </span>
-              <%= f.number_field :received, {:class=>"form-control mask_decimal first_input"} %>
+              <%= f.number_field :received, { class: "form-control mask_decimal first_input" } %>
             </div>
           </div>
         </div>
@@ -62,7 +62,7 @@
             <span class="help-block">monto a ABONAR. </span>
             <div class="input-group col-md-11">
               <span class="input-group-addon"> $ </span>
-              <%= f.number_field :quantity, {:class=>"form-control mask_decimal"} %>
+              <%= f.number_field :quantity, { class: "form-control mask_decimal" } %>
             </div>
           </div>
         </div>
@@ -71,7 +71,7 @@
           <div class="form-group">
             <span class="help-block">forma de pago. </span>
             <div class="input-group col-md-12">
-              <%= f.select :payment_method_id, PaymentMethod.vigentes.map {|c| [c.method, c.id] }, {:include_blank => "Seleccione", :selected => @cash_id}, {:class => "form-control" }   %>
+              <%= f.select :payment_method_id, PaymentMethod.vigentes.map { |c| [c.method, c.id] }, { include_blank: "Seleccione", selected: @cash_id }, { class: "form-control" } %>
             </div>
           </div>
         </div>
@@ -80,30 +80,30 @@
           <button type="button" class="btn green pull-right" onclick="addRow()">Agregar</button>
         </div>
         <!--  datos de la tarjeta cuando aplica -->
-        <div class="col-md-12" id="card_info" style="display: none;">
+        <div class="col-md-offset-6 col-md-6" id="card_info" style="display: none;">
           <div class="form-group">
-            <%= f.label :cardnumber,  {:class=>"col-md-3 control-label", :autocomplete=> "off"} do %> Tarjeta: <span class="required">*</span>
+            <%= f.label :cardnumber, { class: "col-md-2 control-label", :autocomplete=> "off" } do %> Tarjeta: <span class="required">*</span>
             <% end %>
-            <div class="col-md-8">
-                <%= f.text_field :cardnumber, {:class => "form-control"}  %>
-                <span class="help-block">Ultimos 4 digitos de la tarjeta. </span>
+            <div class="col-md-6">
+              <%= f.text_field :cardnumber, { class: "form-control", maxlength: 4 } %>
+              <span class="help-block">Últimos 4 dígitos de la tarjeta. </span>
             </div>
           </div>
         </div>
       </div>
       <div class="col-md-12">
         <table class="table table-striped table-hover table-bordered" id="payments_table">
-            <thead>
-                <tr>
-                    <th> Recibido </th>
-                    <th> Cobro </th>
-                    <th> Forma de pago </th>
-                    <th> Info. adicional </th>
-                    <th> Acciones </th>
-                </tr>
-            </thead>
-            <tbody>
-            </tbody>
+          <thead>
+            <tr>
+              <th> Recibido </th>
+              <th> Cobro </th>
+              <th> Forma de pago </th>
+              <th> Info. adicional </th>
+              <th> Acciones </th>
+            </tr>
+          </thead>
+          <tbody>
+          </tbody>
         </table>
       </div>
       <!-- div para mostrar total -->
@@ -118,7 +118,7 @@
         </div>
       </div>
       <div class="col-md-12">
-       <span class="help-block">Este boton se habilita cuando se cubre la cantidad minima de anticipo. </span>
+       <span class="help-block">Este botón se habilita cuando se cubre la cantidad mínima de anticipo. </span>
         <button type="button" class="btn green btn-block" id="save_move" disabled onclick="confirmReserve()">Apartar</button>
       </div>
     </div>
@@ -126,7 +126,7 @@
 <script type="text/javascript">
   $('#closemodal').removeAttr('data-dismiss');
   $( "#closemodal" ).click(function() {
-    if (window.confirm("Está seguro que desea SALIR?, al salir SE CANCELARÁ EL APARTADO")) {
+    if (window.confirm("¿Está seguro que desea SALIR?, al salir SE CANCELARÁ EL APARTADO")) {
       $.ajax({
         type: "DELETE",
         url: "/sales/" + <%= @sale.id %> ,
@@ -166,7 +166,13 @@
   });
 
   function addRow() {
-    $('#cash_register_move_form').submit();
+    debt = parseFloat($('#sale_total').val());
+    quantity = parseFloat($('#cash_registers_move_quantity').val());
+    if (quantity <= debt) {
+      $('#cash_register_move_form').submit();
+    } else {
+      toastr["error"]("El monto del anticipo no puede ser mayor al total de la venta");
+    }
   }
 
   function unlockConfirmPayment() {

+ 33 - 34
app/views/cash_registers_moves/_quick_credit_payment.html.erb

@@ -1,44 +1,43 @@
 <div class="form-horizontal">
-    <div class="portlet-body form">
-        <div class="form-body">
-            <div class="row">     
-                <div class="col-md-12">
-                    <div class="form-group">
-                       <%= label_tag :customer_id,  {:class=>"col-md-4 control-label"} do %>Cliente <span class="required">*</span> <% end %> 
-                        <div class="col-md-6">
-                          <%= select_tag :customer_id, options_from_collection_for_select(@customers, :id, :nick_name), :include_blank => "Seleccione cliente",  class: "form-control select2" %>
-                        </div>
-                    </div>
-                </div>
+  <div class="portlet-body form">
+    <div class="form-body">
+      <div class="row">
+        <div class="col-md-12">
+          <div class="form-group">
+             <%= label_tag :customer_id,  {:class=>"col-md-4 control-label"} do %>Cliente <span class="required">*</span> <% end %>
+            <div class="col-md-6">
+              <%= select_tag :customer_id, options_from_collection_for_select(@customers, :id, :nick_name), :include_blank => "Seleccione cliente",  class: "form-control select2" %>
             </div>
+          </div>
         </div>
+      </div>
     </div>
-    <div class="form-actions">
-        <h4 class="form-section"> </h4>
-        <div class="row">
-            <div class="col-md-12">                     
-                <button type="submit" class="btn green" onclick="createQuickDebt()">Abonar a credito</button>
-                <button type="button" class="btn default" onclick="cerrarDialog()">Cerrar</button>
-            </div>
-        </div>
-    </div>    
+  </div>
+  <div class="form-actions">
+    <h4 class="form-section"> </h4>
+    <div class="row">
+      <div class="col-md-12">
+        <button type="submit" class="btn green" onclick="createQuickDebt()">Abonar a crédito</button>
+        <button type="button" class="btn default" onclick="cerrarDialog()">Cerrar</button>
+      </div>
+    </div>
+  </div>
 </div>
 <script>
-    App.init();
+  App.init();
 
-    function cerrarDialog() {
-        $('#dialog').modal('toggle');
-    }
+  function cerrarDialog() {
+    $('#dialog').modal('toggle');
+  }
 
-    function createQuickDebt(argument) {
-        var customerId = $('#customer_id').val();
-      $.ajax({
-        type: "GET",
-        url: "/create_quick_debt_payment/" + customerId,
-        dataType: "script",
-        success: function(xhr, status, error) {
-        }
-      }); 
+  function createQuickDebt(argument) {
+    var customerId = $('#customer_id').val();
+    $.ajax({
+    type: "GET",
+    url: "/create_quick_debt_payment/" + customerId,
+    dataType: "script",
+    success: function(xhr, status, error) {
     }
+    });
+  }
 </script>
-	

+ 1 - 0
app/views/cash_registers_moves/create.js.erb

@@ -17,6 +17,7 @@ $("#error_explanation_move").html("")
 		$('#payments_table tbody').append(newRow);
 		$('#cash_registers_move_quantity').val('');
 		$('#cash_registers_move_payment_method_id').val('');
+		$('#cash_registers_move_received').attr('disabled', false);
 		if($("#card_info").is(":visible")) {
 			$('#cash_registers_move_cardnumber').val('');
 			$("#card_info").fadeOut();

+ 10 - 11
app/views/categories/index.html.erb

@@ -45,8 +45,7 @@
 											</div>
 											<div class="actions">
 												<% if can? :create, Category %>
-												<%= link_to new_category_path, {:class=>"btn bold green pull-right filtros"} do %> Nueva Línea de producto <i class="fa fa-plus"></i>
-												<% end %>
+													<%= link_to new_category_path, {:class=>"btn bold green pull-right filtros"} do %> Nueva Línea de producto <i class="fa fa-plus"></i><% end %>
 												<% end %>
 											</div>
 										</div>
@@ -62,26 +61,26 @@
 														<th>Total de productos</th>
 														<th>Status</th>
 														<% if can? :manage, Category %>
-														<th>Acciones</th>
+															<th>Acciones</th>
 														<% end %>
 													</tr>
 												</thead>
 												<tbody>
 												<% @categories.each_with_index do |category, key| %>
-													<tr <% if !category.children.empty? %> class="bold" <% end %> >
+													<tr <% if category.parent_id.zero? %> class="bold" <% end %> >
 														<td><%= key + 1 %></td>
 														<td><%= category.category %></td>
 														<td><%= category.description %></td>
 														<td>
-															<% if category.children.empty? %>
-																<%= category.products.length %>
-															<% else %>
-																<% @productsofchildren = 0 %>
+															<% total_products = category.products.length %>
+															<% if !category.children.empty? %>
+																<% productsofchildren = 0 %>
 																<% category.children.each_with_index do |child, k|%>
-																	<% @productsofchildren += child.products.length %>
+																	<% productsofchildren += child.products.length %>
 																<% end %>
-																<%= @productsofchildren %>
+																<% total_products += productsofchildren %>
 															<% end %>
+															<%= total_products %>
 														</td>
 														<td class="text-center">
 															<% if category.active? %>
@@ -112,7 +111,7 @@
 														</td>
 														<% end %>
 													</tr>
-													<% category.children.each_with_index do |child, k|%>
+													<% category.children.each_with_index do |child, k| %>
 													<tr>
 														<td><%= key + 1 %> - <%= k + 1 %></td>
 														<td><span class="text-muted"> <%= child.category %> </span></td>

+ 4 - 2
app/views/expenses/_expenses_for_admin.html.erb

@@ -52,7 +52,7 @@
                   </td>
                   <td class="text-center">
                     <% if expense.status == "active" %>
-                      <%= link_to expense , method: :delete, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar egreso", data: { confirm: '¿Esta seguro que desea cancelar el egreso?'}   do %> <i class="fa fa-ban"></i><% end %>
+                      <%= link_to expense, method: :delete, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar egreso", data: { confirm: '¿Está seguro que desea cancelar el egreso?' } do %> <i class="fa fa-ban"></i><% end %>
                     <% end %>
                   </td>
                 </tr>
@@ -96,7 +96,9 @@
                     <% end %>
                   </td>
                   <td class="text-center">
-                      <%= link_to expense , method: :delete, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar egreso", data: { confirm: '¿Esta seguro que desea cancelar el egreso?'}   do %> <i class="fa fa-ban"></i><% end %>
+                    <% if expense.active? %>
+                      <%= link_to expense, method: :delete, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar egreso", data: { confirm: '¿Está seguro que desea cancelar el egreso?' } do %> <i class="fa fa-ban"></i><% end %>
+                    <% end %>
                   </td>
                 </tr>
                 <% end %>

+ 6 - 10
app/views/pre_transfers/_pre_transfer.html.erb

@@ -1,22 +1,18 @@
 <tr id="pre_transfer_<%= pre_transfer.id %>">
-  <td>
-    #
-  </td>
+  <td>#</td>
   <td class="text-center">
     <img src="<%= pre_transfer.product.small_img %>" width="100" height="100"/>
-  </td>  
-  <td>
-    <%= pre_transfer.product.sku %>
   </td>
+  <td><%= pre_transfer.product.sku %></td>
   <td>
     <%= pre_transfer.product.name %><br>
     <%= pre_transfer.product.display_attributes %>
   </td>
   <td>
-    <% if pre_transfer.origin_is_pointsale == 1 %>
-      <%= AvailableProduct.find_by(:pointsale_id =>  pre_transfer.origin_id, :product_id => pre_transfer.product_id).stock  + pre_transfer.quantity %> 
-    <% else %> 
-      <%= WarehouseStock.find_by(:warehouse_id => pre_transfer.origin_id, :product_id => pre_transfer.product_id).stock  + pre_transfer.quantity %>
+    <% if pre_transfer.origin_is_pointsale? %>
+      <%= AvailableProduct.find_by(pointsale_id: pre_transfer.origin_id, product_id: pre_transfer.product_id).stock + pre_transfer.quantity %>
+    <% else %>
+      <%= WarehouseStock.find_by(warehouse_id: pre_transfer.origin_id, product_id: pre_transfer.product_id).stock + pre_transfer.quantity %>
     <% end %>
   </td>
   <td>

+ 2 - 1
app/views/pre_transfers/create.js.erb

@@ -6,5 +6,6 @@
 	x = $('#products_table').dataTable();
 	newRow.find('td:eq(0)').html(newRow.find('td:eq(0)').html().replace('#', x.fnGetData().length + 1));
 	table.row.add(newRow).draw();
+  $("#save_transfer").attr("disabled", false);
+  $("#reset_pre_transfers").attr("disabled", false);
 <% end %>
-

+ 3 - 3
app/views/sales/find_reserved_sales_by_date.js.erb

@@ -1,6 +1,6 @@
-var table = $('#sales_table').DataTable();
-$('#sales_table').dataTable().fnClearTable();
+var table = $('#reserved_sales_table').DataTable();
+$('#reserved_sales_table').dataTable().fnClearTable();
 <% @sales.each_with_index do |sale, key| %>
-	var row = $('<%= j render partial: "sale_reserved", locals: {sale: sale} %>');
+	var row = $('<%= j render partial: "sale_reserved", locals: { sale: sale } %>');
 	table.row.add(row).draw();
 <% end %>

+ 90 - 1
app/views/sales/sales_reserved.html.erb

@@ -76,7 +76,7 @@
                   </div>
                   <input type='hidden' name='filter' id='filter' value='<%= @filter %>' >
                   <input type='hidden' name='current_page' id='current_page' value='<%= @current_page %>' >
-                  <table class="table table-striped table-bordered table-hover tableadvancedprintable" id="reserved_sales_table">
+                  <table class="table table-striped table-bordered table-hover" id="reserved_sales_table">
                     <thead>
                       <tr>
                         <th>#</th>
@@ -163,6 +163,18 @@
   <!-- END CONTENT -->
 </div>
 <script>
+  var closePrintView = function(e) {
+    if(e.which == 27) {
+      printViewClosed();
+      $('.hide_c').removeClass("hidden");
+    }
+  };
+
+  function printViewClosed() {
+    $("#reserved_sales_table").dataTable().fnSetColumnVis('.hide_c', true);
+    $(window).unbind('keyup', closePrintView);
+  }
+
   $(document).on("page:change", function() {
      App.init();
      $('#start').datetimepicker({
@@ -182,6 +194,83 @@
     var startDate = moment($("#start").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY')
     var endDate = moment($("#end").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY');
     $('#title_for_print').val('Ventas del ' + startDate + ' al ' + endDate);
+
+    $.fn.dataTableExt.oStdClasses.sFilterInput = "form-control input-medium input-inline";
+
+    $.extend(true, $.fn.DataTable.TableTools.classes, {
+      "container": " pull-right margin-bottom-10",
+      "buttons": {
+        "normal": "btn btn-primary margin-right-10",
+        "disabled": "disabled"
+      },
+      "collection": {
+        "container": "DTTT_dropdown dropdown-menu tabletools-dropdown-menu "
+      }
+    });
+
+    var table = $('#reserved_sales_table').dataTable({
+      // T = tabletools; l = length changing; f = filtering input; t = table; i = table info; p = pagination
+      "dom": "<'row' <'col-md-12'T>><'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f><'col-md-6 col-sm-12'>r><'table-scrollable't><'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>",
+      "tableTools": {
+        "aButtons": [{ // 1
+          "sExtends": "collection",
+          "sButtonText": "Acciones",
+          "aButtons": [ // 2
+            { "sExtends": "print",
+              // "columnDefs": [{
+              //   "targets": 'hide_c',
+              //   "visible": false
+              // }],
+              "sButtonText": "Imprimir",
+              "sInfo": 'Presiona "CTR+P" para imprmir o "ESC" para salir',
+              "sMessage": function() {
+                return "<h2>Lista de ventas desde el " + $("#start").val() + " al " + $("#end").val() + "</h2>";
+              },
+              "fnClick": function(nButton, oConfig) {
+                table.fnSetColumnVis('.hide_c', false);
+                $(window).keyup(closePrintView);
+                this.fnPrint(true, oConfig);
+              }
+            },
+            // { "sExtends": "pdf",
+            //   "sPdfOrientation": "landscape",
+              // "columnDefs": [{
+                // "targets": 'hide_c',
+                // "visible": false
+              // }],
+            //   "sButtonText": "PDF"
+            // }
+          ] // 2
+        }] // 1
+      },
+        "fixedHeader": true,
+        "language": {
+          "aria": {
+            "sortAscending": ": activate to sort column ascending",
+            "sortDescending": ": activate to sort column descending"
+          },
+          "emptyTable": "No hay informacion en la tabla",
+          "info": "Mostrando del _START_ al _END_ de _TOTAL_ registros",
+          "infoEmpty": "No se encontraron coincidencias",
+          "infoFiltered": "(filtrado un total de _MAX_ registros)",
+          "lengthMenu": "Mostrar _MENU_ registros",
+          "search": "Buscar:",
+          "zeroRecords": "No se encontraron coincidencias",
+          "paginate": {
+            "sPrevious": "Ant",
+            "sNext": "Sig"
+          }
+        },
+        "order": [
+            // [0, 'asc']
+        ],
+        "lengthMenu": [
+          [20, 50, 75, 100, -1],
+          [20, 50, 75, 100, "Todos"] // change per page values here
+        ],
+        "pageLength": 20,
+        "bServerSide": false
+    });
   });
 
   function salesByDate() {

+ 2 - 5
app/views/special_prices/new.html.erb

@@ -17,9 +17,6 @@
 		<!-- BEGIN PAGE CONTENT BODY -->
 		<div class="page-content">
 			<div class="container-fluid">
-                <%= link_to special_prices_path, {:class=>"btn blue-hoki pull-right margin-bottom-10"} do %> <i class="fa fa-angle-left "></i> Regresar
-				<% end %>
-				<!-- BEGIN PAGE BREADCRUMBS -->
 				<ul class="page-breadcrumb breadcrumb">
 					<%= render_breadcrumbs :tag => :li, :separator => ' <i class="fa fa-circle"></i> ' %>
 				</ul>
@@ -35,11 +32,11 @@
 										<i class="fa fa-plus font-green"></i>
 										<span class="caption-subject font-green bold uppercase">Registro de descuento(s) especial</span>
 									</div>
-								</div>										
+								</div>
 								<%= render 'form' %>
 							</div>
 						</div>
-					</div>                       
+					</div>
 				</div>
 				<!-- END PAGE CONTENT INNER -->
 			</div>

+ 85 - 66
app/views/transfers/_form.html.erb

@@ -1,10 +1,19 @@
-<%= form_for(@transfer, :html => {:class=>"form-horizontal", :id=> "transfer_form"}) do |f| %>
+<%= form_for(@transfer, html: { class: "form-horizontal", id: "transfer_form" }) do |f| %>
   <div class="portlet-body form">
-    <div id="error_explanation"></div>
+    <% if @transfer.errors.any? %>
+      <div class="alert alert-danger">
+        <strong>Tiene <%= pluralize(@transfer.errors.count, "error") %> no se puede guardar el traspaso</strong><br>
+        <ul>
+          <% @transfer.errors.values.each do |message| %>
+            <li><%= message.first.to_s %></li>
+          <% end %>
+        </ul>
+      </div>
+    <% end %>
     <div class="row">
       <!-- boton para resetear datos -->
       <div class="col-md-offset-10 col-md-2">
-        <button id="reset_pre_transfers" type="button" class="btn btn-warning" <%= @disabled_button ? 'disabled' : '' %> onclick="deletePreTransfers()">Restaurar traspaso</button>
+        <button id="reset_pre_transfers" type="button" class="btn btn-warning" <%= 'disabled' if @pre_transfers.blank? %> onclick="deletePreTransfers()">Restaurar traspaso</button>
       </div>
       <div class="col-md-7">
         <!-- fecha -->
@@ -29,8 +38,8 @@
           <% end %>
           <div class="input-group col-md-6 select2-bootstrap-prepend">
             <%= f.select :origin_id, grouped_options_for_select([
-              ['Puntos de venta',  Pointsale.activos.collect {|p| [ p.name, ('P-' + p.id.to_s) ] }],
-              ['Almacenes', Warehouse.activos.collect {|w| [ w.name, ('W-' + w.id.to_s)] }]], :selected => @origin_id), {:prompt => "Seleccione"}, { :class => 'form-control select2', :disabled => @disable_origin} %>
+              ['Puntos de venta',  Pointsale.activos.collect { |p| [ p.name, ('P-' + p.id.to_s) ] }],
+              ['Almacenes', Warehouse.activos.collect { |w| [ w.name, ('W-' + w.id.to_s)] }]], :selected => @origin_id), {:prompt => "Seleccione"}, { :class => 'form-control select2', :disabled => @disable_origin} %>
             <%= f.hidden_field :origin_id, :value => @origin_id, :id => 'origin_id' %>
           </div>
         </div>
@@ -41,8 +50,8 @@
           <% end %>
           <div class="input-group col-md-6 select2-bootstrap-prepend">
             <%= f.select :destiny_id, grouped_options_for_select([
-              ['Puntos de venta',  @destiny_pointsales.collect {|p| [ p.name, ('P-' + p.id.to_s)] }],
-              ['Almacenes', Warehouse.activos.collect {|w| [ w.name, ('W-' + w.id.to_s)] }]], :selected => @destiny_id), {:prompt => "Seleccione"}, { :class => 'form-control select2', :disabled => @disable_destiny} %>
+              ['Puntos de venta',  @destiny_pointsales.collect { |p| [ p.name, ('P-' + p.id.to_s)] }],
+              ['Almacenes', Warehouse.activos.collect { |w| [ w.name, ('W-' + w.id.to_s)] }]], :selected => @destiny_id), {:prompt => "Seleccione"}, { :class => 'form-control select2', :disabled => @disable_destiny} %>
             <%= f.hidden_field :destiny_id, :value => @destiny_id, :id => 'destiny_id' %>
           </div>
         </div>
@@ -90,8 +99,9 @@
     <div class="form-actions">
       <div class="row">
         <div class="col-md-9">
-          <%= f.submit 'Guardar', {:class=>"btn green"} %>
-          <%= link_to 'Cancelar', transfers_path(:filter => @filter, :current_page => @current_page), {:class=>"btn default"} %>
+          <!-- < %= f.submit 'Guardar', { class: "btn green", disabled: (@pre_transfers.present? ? false : true), id: "save_transfer" } %> -->
+          <button type="button" class="btn green" onclick="addTransfer()" id="save_transfer" <%= 'disabled' if @pre_transfers.blank? %>>Guardar</button>
+          <%= link_to 'Cancelar', transfers_path(filter: @filter, current_page: @current_page), { class: "btn default" } %>
         </div>
       </div>
     </div>
@@ -99,12 +109,22 @@
 <% end %>
 
 <script type="text/javascript">
-
   var selectedProduct;
   var timeout = null;
+
+  function addTransfer() {
+    var origin = $('#origin_id').val();
+    var destiny = $('#destiny_id').val();
+    if((origin && destiny) && (origin != destiny)) {
+      $("#transfer_form").submit();
+    } else {
+      toastr["error"]("Falta seleccionar datos del formulario, o el origen y el destino son los mismos.");
+    }
+  }
+
   $(document).on("page:change", function() {
-     App.init();
-     enumeratePreTransfers();
+    App.init();
+    enumeratePreTransfers();
 
     $('#datetimepicker1').datetimepicker({
       icons: {
@@ -115,54 +135,52 @@
     });
   });
 
-    var bloodhound = new Bloodhound({
-      datumTokenizer: function (d) {
-        return Bloodhound.tokenizers.whitespace(d.value);
-      },
-      queryTokenizer: Bloodhound.tokenizers.whitespace,
-      remote: {
-        url: "/find_from_stock_by_pointsale?pointsale_id=ID&query=%QUERY",
-        wildcard: '%QUERY',
-        replace: function(url, uriEncodedQuery) {
-            origin = $('#origin_id').val();
-            return url.replace('ID', origin).replace('%QUERY', uriEncodedQuery)
-        }
+  var bloodhound = new Bloodhound({
+    datumTokenizer: function (d) {
+      return Bloodhound.tokenizers.whitespace(d.value);
+    },
+    queryTokenizer: Bloodhound.tokenizers.whitespace,
+    remote: {
+      url: "/find_from_stock_by_pointsale?pointsale_id=ID&query=%QUERY",
+      wildcard: '%QUERY',
+      replace: function(url, uriEncodedQuery) {
+          origin = $('#origin_id').val();
+          return url.replace('ID', origin).replace('%QUERY', uriEncodedQuery)
       }
-    });
-
-    bloodhound.initialize();
-
+    }
+  });
 
-    $('#typeahead').typeahead(
-      {
-        minLength: 3
-      },
-      {
-        displayKey: 'name',
-        source: bloodhound.ttAdapter(),
-        limit: Infinity,
-        templates: {
-          empty: [
-            '<div class="empty-message">',
-              'No se encontró ningun producto. Favor de verificar',
-            '</div>'
-          ].join('\n'),
-           suggestion: Handlebars.compile(
-              '<div class="media">' +
-                '<div class="pull-left">' +
-                    '<div class="media-object">' +
-                        '<img src="{{small_img}}" width="50" height="50"/>' +
-                    '</div>' +
-                '</div>' +
-                '<div class="media-body">' +
-                    '<h4 class="media-heading"><strong>{{sku}}</strong> | {{name}}</h4>' +
-                    '<p>{{barcode}}</p>' +
-                    '<p>{{description}}</p>' +
-                    '<p>{{display_attributes}}</p>' +
-                '</div>' +
-              '</div>')
-        }
-    });
+  bloodhound.initialize();
+  $('#typeahead').typeahead(
+    {
+      minLength: 3
+    },
+    {
+      displayKey: 'name',
+      source: bloodhound.ttAdapter(),
+      limit: Infinity,
+      templates: {
+        empty: [
+          '<div class="empty-message">',
+            'No se encontró ningun producto. Favor de verificar',
+          '</div>'
+        ].join('\n'),
+         suggestion: Handlebars.compile(
+            '<div class="media">' +
+              '<div class="pull-left">' +
+                  '<div class="media-object">' +
+                      '<img src="{{small_img}}" width="50" height="50"/>' +
+                  '</div>' +
+              '</div>' +
+              '<div class="media-body">' +
+                  '<h4 class="media-heading"><strong>{{sku}}</strong> | {{name}}</h4>' +
+                  '<p>{{barcode}}</p>' +
+                  '<p>{{description}}</p>' +
+                  '<p>{{display_attributes}}</p>' +
+              '</div>' +
+            '</div>')
+      }
+  });
 
   $('body').barcodeListener().on('barcode.valid', function(e, code) {
     findProductByBarcode(code);
@@ -238,7 +256,7 @@
   }
 
   function updateQuantity(input) {
-    if(input.val()) {
+    if(input.val() > 0) {
       clearTimeout(timeout);
       timeout = setTimeout(function () {
         var idText = input.closest('tr').attr('id');
@@ -249,21 +267,26 @@
             dataType: "json",
             data: {pre_transfer: {quantity: input.val()}},
             success: function(xhr, status, error) {
+              $("#save_transfer").attr("disabled", false);
             },
             statusCode: {
               422: function() {
+                $("#save_transfer").attr("disabled", true);
                 toastr["error"]("Error, El stock es insuficiente.");
               }
             }
         });
       }, 700);
+    } else {
+      $("#save_transfer").attr("disabled", true);
+      toastr["error"]("La cantidad debe ser mayor a 0");
     }
   }
 
- function findProductByBarcode(barcode) {
+  function findProductByBarcode(barcode) {
     var origin = $('#origin_id').val();
     var destiny = $('#destiny_id').val();
-    if(origin && destiny) {
+    if((origin && destiny) && (origin != destiny)) {
       $.ajax({
         type: "get",
         url:  '/add_pre_transfer_by_barcode/' + barcode + "/" + origin + "/" + destiny,
@@ -272,11 +295,7 @@
         },
       });
     } else {
-      toastr["error"]("Falta seleccionar datos del formulario.");
+      toastr["error"]("Falta seleccionar datos del formulario, o el origen y el destino son los mismos.");
     }
   }
-
 </script>
-
-
-

+ 10 - 30
app/views/transfers/_index_for_admin.html.erb

@@ -11,49 +11,29 @@
           <th>Destino</th>
           <th>Productos</th>
           <th>Status</th>
-          <th>Status recepción</th>
+          <th>Status<br>recepción</th>
           <th>Acciones</th>
         </tr>
       </thead>
       <tbody>
         <% @transfers.each_with_index do |transfer, key| %>
           <tr>
-            <td> <%= key +1 %> </td>
-            <td> <%= l(transfer.transfer_date, :format => '%d/%B/%Y') %> </td>
+            <td> <%= key + 1 %> </td>
+            <td> <%= l(transfer.transfer_date, format: '%d/%B/%Y') %> </td>
             <td>
-             <%= transfer.origin_is_pointsale == 1 ? Pointsale.find(transfer.origin_id).name : Warehouse.find(transfer.origin_id).name %>
+             <%= transfer.origin_is_pointsale? ? Pointsale.find(transfer.origin_id).name : Warehouse.find(transfer.origin_id).name %>
             </td>
             <td>
-              <%= transfer.destiny_is_pointsale == 1 ? Pointsale.find(transfer.destiny_id).name : Warehouse.find(transfer.destiny_id).name %>
+              <%= transfer.destiny_is_pointsale? ? Pointsale.find(transfer.destiny_id).name : Warehouse.find(transfer.destiny_id).name %>
             </td>
-            <td> <%= transfer.products.count %> </td>
+            <td> <%= transfer.transfer_details.count %> </td>
+            <td class="text-center"><%= transfer_status(transfer) %></td>
+            <td class="text-center"><%= transfer_details(transfer) %></td>
             <td class="text-center">
-                <% case transfer.status %>
-                  <% when "cancelled" %>
-                    <span class="label label-danger"> CANCELADO </span>
-                  <% when "pending" %>
-                    <span class="label bg-yellow-crusta"> PENDIENTE DE RECEPCIÓN </span>
-                  <% when "received" %>
-                    <span class="label label-success"> RECIBIDO </span>
-                <% end %>
-            </td>
-            <td class="text-center">
-              <% if transfer.transfer_details.where(:has_looses => 1).count > 0 &&
-                transfer.transfer_details.where(:has_surplus => 1).count == 0 %>
-                <span class="label label-warning"> CON PERDIDAS </span>
-              <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0 &&
-                transfer.transfer_details.where(:has_looses => 1).count == 0 %>
-                <span class="label label-warning"> CON EXCEDENTE </span>
-              <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0  &&
-              transfer.transfer_details.where(:has_looses => 1).count > 0 %>
-                <span class="label label-danger"> CON INCONSISTENCIAS </span>
-              <% end %>
-            </td>
-            <td class="text-center">
-              <%= link_to transfer, {:class=>"btn btn-icon-only default filtros", :title=>"Ver traspaso"} do %>
+              <%= link_to transfer, { class: "btn btn-icon-only default filtros", title: "Ver traspaso" } do %>
                 <i class="fa fa-search"></i>
               <% end %>
-              <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), {:class=>"btn btn-icon-only default", :target => "blank"} do %>
+              <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), { class: "btn btn-icon-only default", target: "blank" } do %>
                 <i class="fa fa-print"></i>
               <% end %>
             </td>

+ 28 - 72
app/views/transfers/_index_for_manager.html.erb

@@ -6,7 +6,7 @@
       </li>
       <li>
           <a href="#enviados" data-toggle="tab"> Enviados </a>
-      </li>                    
+      </li>
     </ul>
   </div>
   <div class="col-md-10 col-sm-9 col-xs-9">
@@ -22,7 +22,7 @@
                     <th>Origen</th>
                     <th>Productos</th>
                     <th>Status</th>
-                    <th>Status recepción</th>                       
+                    <th>Status recepción</th>
                     <th>Acciones</th>
                   </tr>
                 </thead>
@@ -32,49 +32,27 @@
                       <td> <%= key +1 %> </td>
                       <td> <%= l(transfer.transfer_date, :format => '%d/%B/%Y') %> </td>
                       <td> <%= transfer.origin_is_pointsale == 1 ? Pointsale.find(transfer.origin_id).name : Warehouse.find(transfer.origin_id).name %>  </td>
-                      <td> <%= transfer.products.count %> </td>
+                      <td> <%= transfer.transfer_details.count %> </td>
+                      <td><%= transfer_status(transfer) %> </td>
+                      <td class="text-center"><%= transfer_details(transfer) %></td>
                       <td>
-                          <% case transfer.status %>
-                            <% when "cancelled" %>
-                              <span class="label label-danger"> CANCELADO </span>
-                            <% when "pending" %>
-                              <span class="label bg-yellow-crusta"> PENDIENTE DE RECEPCIÓN </span>
-                            <% when "received" %>
-                              <span class="label label-success"> RECIBIDO </span>
-                          <% end %>
-                      </td>
-                      <td class="text-center">
-                        <% if transfer.transfer_details.where(:has_looses => 1).count > 0 && 
-                          transfer.transfer_details.where(:has_surplus => 1).count == 0 %>
-                          <span class="label label-warning"> CON PERDIDAS </span>
-                        <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0 &&
-                          transfer.transfer_details.where(:has_looses => 1).count == 0 %>
-                          <span class="label label-warning"> CON EXCEDENTE </span>
-                        <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0  && 
-                        transfer.transfer_details.where(:has_looses => 1).count > 0 %>
-                          <span class="label label-danger"> CON INCONSISTENCIAS </span>
-                        <% elsif transfer.received? %>
-                          <i class='fa fa-check fa-2 font-green'></i> 
-                        <% end %>
-                      </td>                       
-                      <td>
-                        <%= link_to transfer, {:class=>"btn btn-icon-only default", :title=>"Ver traspaso"} do %>
+                        <%= link_to transfer, { class: "btn btn-icon-only default", title:"Ver traspaso" } do %>
                           <i class="fa fa-search"></i>
                         <% end %>
-                        <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), {:class=>"btn btn-icon-only default", :target => "blank"} do %>
+                        <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), { class: "btn btn-icon-only default", target: "blank" } do %>
                           <i class="fa fa-print"></i>
-                        <% end %>                         
-                        <% if transfer.status =="pending" %>
-                          <%= link_to verify_transfer_path(transfer), {:class=>"btn btn-icon-only green-meadow", :title=>"Verificar traspaso"} do %>
+                        <% end %>
+                        <% if transfer.pending? %>
+                          <%= link_to verify_transfer_path(transfer), { class: "btn btn-icon-only green-meadow", title:"Verificar traspaso" } do %>
                             <i class="fa fa-check-square-o"></i>
-                          <% end %>                              
+                          <% end %>
                         <% end %>
                       </td>
                     </tr>
-                  <% end %>            
+                  <% end %>
                 </tbody>
-              </table>                            
-            </div>                                  
+              </table>
+            </div>
           </div>
         </div>
         <div class="tab-pane fade" id="enviados">
@@ -88,56 +66,34 @@
                     <th>Destino</th>
                     <th>Productos</th>
                     <th>Status</th>
-                    <th>Status recepción</th>                    
+                    <th>Status<br>recepción</th>
                     <th>Acciones</th>
                   </tr>
                 </thead>
                 <tbody>
                   <% @sent.each_with_index do |transfer, key| %>
                     <tr>
-                      <td> <%= key +1 %> </td>
-                      <td> <%= l(transfer.transfer_date, :format => '%d/%B/%Y') %> </td>
-                      <td> <%= transfer.destiny_is_pointsale == 1 ? Pointsale.find(transfer.destiny_id).name : Warehouse.find(transfer.destiny_id).name %>  </td>
-                      <td> <%= transfer.products.count %> </td>
+                      <td> <%= key + 1 %> </td>
+                      <td> <%= l(transfer.transfer_date, format: '%d/%B/%Y') %> </td>
+                      <td> <%= transfer.destiny_is_pointsale == 1 ? Pointsale.find(transfer.destiny_id).name : Warehouse.find(transfer.destiny_id).name %></td>
+                      <td> <%= transfer.products.count %></td>
+                      <td><%= transfer_status(transfer) %></td>
+                      <td class="text-center"><%= transfer_details(transfer) %></td>
                       <td>
-                          <% case transfer.status %>
-                            <% when "cancelled" %>
-                              <span class="label label-danger"> CANCELADO </span>
-                            <% when "pending" %>
-                              <span class="label bg-yellow-crusta"> PENDIENTE DE RECEPCIÓN </span>
-                            <% when "received" %>
-                              <span class="label label-success"> RECIBIDO </span>
-                          <% end %>
-                      </td>
-                      <td class="text-center">
-                        <% if transfer.transfer_details.where(:has_looses => 1).count > 0 && 
-                          transfer.transfer_details.where(:has_surplus => 1).count == 0 %>
-                          <span class="label label-warning"> CON PERDIDAS </span>
-                        <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0 &&
-                          transfer.transfer_details.where(:has_looses => 1).count == 0 %>
-                          <span class="label label-warning"> CON EXCEDENTE </span>
-                        <% elsif transfer.transfer_details.where(:has_surplus => 1).count > 0  && 
-                        transfer.transfer_details.where(:has_looses => 1).count > 0 %>
-                          <span class="label label-danger"> CON INCONSISTENCIAS </span>
-                        <% elsif transfer.received? %>
-                          <i class='fa fa-check fa-2 font-green'></i>                           
-                        <% end %>
-                      </td>                      
-                      <td>
-                        <%= link_to transfer, {:class=>"btn btn-icon-only default", :title=>"Ver traspaso"} do %>
+                        <%= link_to transfer, { class: "btn btn-icon-only default", title: "Ver traspaso" } do %>
                           <i class="fa fa-search"></i>
                         <% end %>
-                        <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), {:class=>"btn btn-icon-only default", :target => "blank"} do %>
+                        <%= link_to print_transfer_receipt_path(transfer.id, format: 'pdf'), { class: "btn btn-icon-only default", target: "blank" } do %>
                           <i class="fa fa-print"></i>
-                        <% end %>                         
+                        <% end %>
                       </td>
                     </tr>
-                  <% end %>            
+                  <% end %>
                 </tbody>
-              </table>                            
-            </div>                                  
+              </table>
+            </div>
           </div>
         </div>
      </div>
   </div>
-</div>
+</div>

+ 44 - 60
app/views/transfers/show.html.erb

@@ -18,7 +18,7 @@
 		<div class="page-content">
 			<div class="container-fluid">
 				<div class="pull-right margin-bottom-10 ">
-					<%= link_to  transfers_path(:filter => @filter, :current_page => @current_page), {:class=>"fr-space btn blue-hoki "} do %>
+					<%= link_to transfers_path(:filter => @filter, :current_page => @current_page), {:class=>"fr-space btn blue-hoki "} do %>
 						<i class="fa fa-angle-left "></i>
 						Regresar
 					<% end %>
@@ -38,54 +38,47 @@
 								</div>
 								<div class="portlet-body">
 									<div class="row static-info">
-										<div class="col-md-6 name"> <i class="fa fa-flag"></i>
+										<div class="col-md-5 name"> <i class="fa fa-flag"></i>
 										&nbsp Origen:</div>
-										<div class="col-md-6 value"> <%= @transfer.origin_is_pointsale == 1 ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name %> </div>
+										<div class="col-md-7 value"> <%= @transfer.origin_is_pointsale? ? Pointsale.find(@transfer.origin_id).name : Warehouse.find(@transfer.origin_id).name %> </div>
 									</div>
 									<div class="row static-info">
-										<div class="col-md-6 name"> <i class="fa fa-plane"></i>
+										<div class="col-md-5 name"> <i class="fa fa-plane"></i>
 										&nbsp Destino:</div>
-										<div class="col-md-6 value"> <%= @transfer.destiny_is_pointsale == 1 ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name %> </div>
+										<div class="col-md-7 value"> <%= @transfer.destiny_is_pointsale? ? Pointsale.find(@transfer.destiny_id).name : Warehouse.find(@transfer.destiny_id).name %> </div>
 									</div>
 									<div class="row static-info">
-										<div class="col-md-6 name"> <i class="fa fa-calendar"></i>
+										<div class="col-md-5 name"> <i class="fa fa-calendar"></i>
 										&nbsp Fecha envío: </div>
-										<div class="col-md-6 value"> <%= l(@transfer.transfer_date, :format => '%d/%B/%Y') %> </div>
+										<div class="col-md-7 value"> <%= l(@transfer.transfer_date, :format => '%d/%B/%Y') %> </div>
 									</div>
 									<div class="row static-info">
-										<div class="col-md-6 name"> <i class="fa fa-odnoklassniki"></i>
+										<div class="col-md-5 name"> <i class="fa fa-odnoklassniki"></i>
 										&nbsp Capturó: </div>
-										<div class="col-md-6 value"> <%= @transfer.user.first_name %> </div>
+										<div class="col-md-7 value"> <%= @transfer.user.first_name %> </div>
 									</div>
 									<div class="row static-info">
-										<div class="col-md-6 name"> <i class="fa fa-calendar"></i>
+										<div class="col-md-5 name"> <i class="fa fa-calendar"></i>
 										&nbsp Status: </div>
-										<div class="col-md-6 value">
-							                <% case @transfer.status %>
-							                  <% when "cancelled" %>
-							                    <span class="label label-danger"> CANCELADO </span>
-							                  <% when "pending" %>
-							                    <span class="label bg-yellow-crusta"> PENDIENTE</span>
-							                  <% when "received" %>
-							                    <span class="label label-success"> RECIBIDO </span>
-							                <% end %>
+										<div class="col-md-7 value">
+			                <%= transfer_status(@transfer) %>
 										</div>
 									</div>
-									<% if @transfer.received?%>
+									<% if @transfer.received? %>
 										<div class="row static-info">
-											<div class="col-md-6 name"> <i class="fa fa-calendar"></i>
+											<div class="col-md-5 name"> <i class="fa fa-calendar"></i>
 											&nbsp Fecha recepcion:</div>
-											<div class="col-md-6 value"> <%= l(@transfer.reception_date, :format => '%d/%B/%Y') %>  </div>
+											<div class="col-md-7 value"> <%= l(@transfer.reception_date, :format => '%d/%B/%Y') %>  </div>
 										</div>
 										<div class="row static-info">
-											<div class="col-md-6 name"> <i class="fa fa-smile-o"></i>
+											<div class="col-md-5 name"> <i class="fa fa-smile-o"></i>
 											&nbsp Recibió:</div>
-											<div class="col-md-6 value"> <%= @transfer.received_by.first_name %> </div>
+											<div class="col-md-7 value"> <%= @transfer.received_by.first_name %> </div>
 										</div>
 										<div class="row static-info">
-											<div class="col-md-6 name"> <i class="fa fa-comments"></i>
+											<div class="col-md-5 name"> <i class="fa fa-comments"></i>
 											&nbsp Observaciones:</div>
-											<div class="col-md-10 value"> <%= @transfer.observations %> </div>
+											<div class="col-md-70 value"> <%= @transfer.observations %> </div>
 										</div>
 									<% end %>
 								</div>
@@ -98,42 +91,33 @@
 								</div>
 								<div class="portlet-body">
 									<div class="table-scrollable">
-								        <table class="table table-hover table-bordered">
-								            <thead>
-								                <tr class="uppercase">
-								                    <th> # </th>
-								                    <th> Producto </th>
-								                    <th> Cantidad enviada </th>
-								                    <th> Cantidad recibida </th>
-								                    <th> Status de recepción</th>
-								                </tr>
-								            </thead>
-								            <tbody>
-								              <% @transfer.transfer_details.each_with_index do |detail, key| %>
-								                <tr>
-								                  	<td> <%= key +1 %> </td>
-								                  	<td>
-								                  		<%= detail.product.name %><br>
+						        <table class="table table-hover table-bordered">
+					            <thead>
+				                <tr class="uppercase">
+			                    <th> # </th>
+			                    <th> Producto </th>
+			                    <th> Cantidad enviada </th>
+			                    <th> Cantidad recibida </th>
+			                    <th> Status de recepción</th>
+				                </tr>
+					            </thead>
+					            <tbody>
+					              <% @transfer.transfer_details.each_with_index do |detail, key| %>
+					                <tr>
+				                  	<td> <%= key + 1 %> </td>
+				                  	<td>
+				                  		<%= detail.product.name %><br>
     													<%= detail.product.display_attributes %>
-
-								                  	</td>
-								                  	<td> <%= detail.quantity %> </td>
-								                  	<td> <%= detail.adjustment if @transfer.received?%> </td>
-								            		<td class="text-center">
-										              <% if detail.has_looses? %>
-										                <span class="label label-warning"> CON PERDIDA </span>
-										              <% elsif detail.has_surplus? %>
-										                <span class="label label-warning"> CON EXCEDENTE </span>
-										              <% elsif @transfer.received? %>
-				              							<i class='fa fa-check fa-2 font-green'></i>
-										              <% end %>
-										            </td>
-								                </tr>
-								              <% end %>
-								            </tbody>
-				                    	</table>
+				                  	</td>
+				                  	<td> <%= detail.quantity %> </td>
+				                  	<td> <%= detail.adjustment if @transfer.received? %> </td>
+						            		<td class="text-center"><%= transfer_details_status(detail) if @transfer.received? %></td>
+					                </tr>
+					              <% end %>
+					            </tbody>
+                  	</table>
 									</div>
-		                    	</div>
+              	</div>
 							</div>
 						</div>
 					</div>