Jacqueline Maldonado 7 سال پیش
والد
کامیت
3aed90d1c3

+ 71 - 3
app/controllers/units_controller.rb

@@ -1,12 +1,80 @@
 class UnitsController < ApplicationController
-	##--- Abilities 
+	##--- Abilities
 	load_and_authorize_resource
 
+  before_action :set_unit, only: [:edit, :update, :update_status]
+
 	##--- Breadcrum_rails
 	add_breadcrumb I18n.t("breadcrumbs." + controller_name), :units_path
 
-	## /**Creamos el listado de las unidades de medida, esta lista es de las propuestas por SAT,  por ello se hace solo la lista no CRUD**/ 	
+	## /**Creamos el listado de las unidades de medida, esta lista es de las propuestas por SAT,  por ello se hace solo la lista no CRUD**/
 	def index
-		@units = Unit.all
+		@units = Unit.all.order(unit: :asc)
 	end
+
+  def new
+    @unit = Unit.new
+  end
+
+  def edit; end
+
+  def create
+    @unit = Unit.new(unit_params)
+    @unit.status = :active
+    respond_to do |format|
+      message = "Unidad de medida #{@unit.unit} creada."
+      @unit.audit_comment = message
+      if @unit.save
+        format.js
+      else
+        format.html { render :new }
+        format.js
+        format.json { render json: @unit.errors, status: :unprocessable_entity }
+      end
+    end
+  end
+
+  def update
+    respond_to do |format|
+      message = "Unidad de medida #{@unit.unit} modificada."
+      @unit.audit_comment = message
+      if @unit.update(unit_params)
+        format.js
+      else
+        format.html { render :edit }
+        format.js
+        format.json { render json: @unit.errors, status: :unprocessable_entity }
+      end
+    end
+  end
+
+  def update_status
+    @unit.status =
+      if @unit.active?
+        0
+      else
+        1
+      end
+    respond_to do |format|
+      message = "Se actualizó el status de la unidad de medida #{@unit.unit}."
+      @unit.audit_comment = message
+      if @unit.save
+        format.html { redirect_to units_path, success: message }
+        format.json { head :no_content }
+      else
+        format.html { redirect_to units_path }
+        format.json { render json: @unit.errors, status: :unprocessable_entity }
+      end
+    end
+  end
+
+  private
+
+  def set_unit
+    @unit = Unit.find(params[:id])
+  end
+
+  def unit_params
+    params.require(:unit).permit(:unit, :status)
+  end
 end

+ 5 - 1
app/models/unit.rb

@@ -1,8 +1,12 @@
 class Unit < ActiveRecord::Base
 	has_many :products
 
+  audited
 
+  validates_presence_of :unit, message: "Debe indicar el nombre de la unidad de medida"
+
+  enum status: [:inactive, :active]
 
 	##--- Tipo de vistas / consultas
-	scope :vigentes, -> { where( "status != -1") }
+	scope :vigentes, -> { where.not(status: 0) }
 end

+ 31 - 0
app/views/units/_form.html.erb

@@ -0,0 +1,31 @@
+<%= form_for(@unit, remote: true, html: { class: "form-horizontal" }) do |f| %>
+  <div class="portlet-body form">
+    <div class="row col-md-12">
+      <div class="alert alert-danger hidden" id="errors"></div>
+    </div>
+    <div class="form-body">
+      <div class="row">
+        <div class="form-group">
+          <%= f.label :unit, { class: "col-md-2 control-label" } do %> Nombre <span class="required">*</span>
+          <% end %>
+          <div class="col-md-8" style="padding-left: 0px;padding-right: 0px">
+            <%= f.text_field :unit, { class: "form-control" } %>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="form-actions">
+      <div class="row">
+        <div class="col-md-offset-3 col-md-9">
+          <%= f.submit 'Guardar', { class: "btn green" } %>
+        </div>
+      </div>
+    </div>
+  </div>
+<% end %>
+
+<script type="text/javascript">
+  $(document).ready(function() {
+    App.init();
+  });
+</script>

+ 11 - 0
app/views/units/create.js.erb

@@ -0,0 +1,11 @@
+$("#errors").html("");
+<% if @unit.errors.any? %>
+  $('#errors').removeClass('hidden');
+  <% @unit.errors.values.each do |message| %>
+    $("#errors").append($("<li />").html("<%= message.first.to_s %>"));
+  <% end %>
+<% else %>
+  $('#dialog').modal('toggle');
+  window.location = "<%= units_path %>";
+  $("#notice").html("<%= flash[:notice] %>");
+<% end %>

+ 14 - 0
app/views/units/edit.js.erb

@@ -0,0 +1,14 @@
+$('#dialog h3.modal-title').html("Editar unidad de medida");
+$('#dialog').removeClass('modal-lg');
+$('.modal-footer').remove();
+$('.modal-body').html(""); //limpiar el modal antes; la siguiente linea es por si se abrio previamente el detalle de venta
+$('.modal-dialog').removeClass('modal-lg');
+// Rend$( ".selector" ).dialog({ closeOnEscape: false });er the edit form
+$('.modal-body').html('<%= j render("form") %>');
+// Show the dynamic dialog
+$('#dialog').modal("show");
+
+// Set focus to the first element
+$('#dialog').on('shown.bs.modal', function () {
+  $('.first_input').focus();
+});

+ 83 - 64
app/views/units/index.html.erb

@@ -1,73 +1,92 @@
-		<!-- BEGIN CONTAINER -->
-		<div class="page-container">
-			<!-- BEGIN CONTENT -->
-			<div class="page-content-wrapper">
-				<!-- BEGIN CONTENT BODY -->
-				<!-- BEGIN PAGE HEAD-->
-				<div class="page-head">
-					<div class="container-fluid">
-						<!-- BEGIN PAGE TITLE -->
-						<div class="page-title">
-							<h1>Unidades de medida </h1>
-						</div>
-						<!-- END PAGE TITLE -->
-					</div>
+<div class="page-container">
+	<div class="page-content-wrapper">
+		<div class="page-head">
+			<div class="container-fluid">
+				<div class="page-title">
+					<h1>Unidades de medida </h1>
 				</div>
-				<!-- END PAGE HEAD-->
-				<!-- BEGIN PAGE CONTENT BODY -->
-				<div class="page-content">
-					<div class="container-fluid">
-						<!-- BEGIN PAGE BREADCRUMBS -->
-						<ul class="page-breadcrumb breadcrumb">
-							<li>
-								<a href="/">Inicio</a>
-								<i class="fa fa-circle"></i>
-							</li>
-							<li>
-								<span>Unidades de medida</span>
-							</li>
-						</ul>
-						<!-- END PAGE BREADCRUMBS -->
-						<!-- BEGIN PAGE CONTENT INNER -->
-						<div class="page-content-inner">
-							<div class="row">
-								<div class="col-md-6">
-									<div class="portlet light ">
-										<div class="portlet-title">
-											<div class="caption">
-												<i class="fa fa-list "></i>
-												<span class="caption-subject bold uppercase">Lista de Unidades de medida</span>
-											</div>
-										</div>
-										<div class="portlet-body">
-											<table class="table table-striped table-hover">
-												<thead>
-													<tr>
-														<th>#</th>
-														<th>Unidad de medida</th>
-													</tr>
-												</thead>
-												<tbody>
-												<% @units.each_with_index do |unit, key| %>
-													<tr>
-														<td><%= key + 1 %></td>
-														<td><%= unit.unit %></td>
-													</tr>
-												<% end %>
-												</tbody>
-											</table>
-										</div>
+			</div>
+		</div>
+		<!-- END PAGE HEAD-->
+		<!-- BEGIN PAGE CONTENT BODY -->
+		<div class="page-content">
+			<div class="container-fluid">
+				<!-- BEGIN PAGE BREADCRUMBS -->
+				<ul class="page-breadcrumb breadcrumb">
+					<li>
+						<a href="/">Inicio</a>
+						<i class="fa fa-circle"></i>
+					</li>
+					<li>
+						<span>Unidades de medida</span>
+					</li>
+				</ul>
+				<!-- END PAGE BREADCRUMBS -->
+				<!-- BEGIN PAGE CONTENT INNER -->
+				<div class="page-content-inner">
+					<div id="notice">
+	          <% if success %>
+	            <div class="alert alert-success">
+	              <p><%= success %></p>
+	            </div>
+	          <% elsif warning %>
+	            <div class="alert alert-warning">
+	              <p><%= warning %></p>
+	            </div>
+	          <% end %>
+	         </div>
+					<div class="row">
+						<div class="col-md-8">
+							<div class="portlet light ">
+								<div class="portlet-title">
+									<div class="caption">
+										<i class="fa fa-list "></i>
+										<span class="caption-subject bold uppercase">Lista de Unidades de medida</span>
+									</div>
+									<div class="actions">
+										<% if can? :create, Unit %>
+                      <%= link_to new_unit_path, remote: true, class: "btn bold green pull-right" do %> Nueva unidad de medida <i class="fa fa-plus"></i>
+                      <% end %>
+                    <% end %>
 									</div>
 								</div>
-									
+								<div class="portlet-body">
+									<table class="table table-striped table-hover tableadvanced">
+										<thead>
+											<tr>
+												<th>#</th>
+												<th>Unidad de medida</th>
+												<th>Acciones</th>
+											</tr>
+										</thead>
+										<tbody>
+											<% @units.each_with_index do |unit, key| %>
+												<tr>
+													<td><%= key + 1 %></td>
+													<td><%= unit.unit %></td>
+													<td>
+														<%= link_to edit_unit_path(unit), remote: true, class: "btn btn-icon-only btn-primary", title: "Editar unidad de medida" do %><i class="fa fa-edit"></i> <% end %>
+														<% if unit.active? %>
+                              <%= link_to unit_status_path(unit), class: "btn btn-icon-only default", title: "Desactivar unidad de medida", data: { confirm: '¿Está seguro de desactivar la unidad de medida?', method: 'post' } do %>
+                                <i class="fa fa-toggle-off"></i>
+                              <% end %>
+                            <% elsif unit.inactive? %>
+                              <%= link_to unit_status_path(unit), class: "btn btn-icon-only green-jungle", title: "Activar unidad de medida", data: { confirm: '¿Está seguro de activar la unidad de medida?', method: 'post' } do %>
+                                <i class="fa fa-toggle-on"></i>
+                              <% end %>
+                            <% end %>
+													</td>
+												</tr>
+											<% end %>
+										</tbody>
+									</table>
+								</div>
 							</div>
 						</div>
-						<!-- END PAGE CONTENT INNER -->
 					</div>
 				</div>
-				<!-- END PAGE CONTENT BODY -->
-				<!-- END CONTENT BODY -->
+				<!-- END PAGE CONTENT INNER -->
 			</div>
-			<!-- END CONTENT -->
 		</div>
-		<!-- END CONTAINER -->
+	</div>
+</div>

+ 14 - 0
app/views/units/new.js.erb

@@ -0,0 +1,14 @@
+$('#dialog h3.modal-title').html("Nueva unidad de medida");
+$('#dialog').removeClass('modal-lg');
+$('.modal-footer').remove();
+$('.modal-body').html(""); //limpiar el modal antes; la siguiente linea es por si se abrio previamente el detalle de venta
+$('.modal-dialog').removeClass('modal-lg');
+// Rend$( ".selector" ).dialog({ closeOnEscape: false });er the edit form
+$('.modal-body').html('<%= j render("form") %>');
+// Show the dynamic dialog
+$('#dialog').modal("show");
+
+// Set focus to the first element
+$('#dialog').on('shown.bs.modal', function () {
+  $('.first_input').focus();
+});

+ 11 - 0
app/views/units/update.js.erb

@@ -0,0 +1,11 @@
+$("#errors").html("");
+<% if @unit.errors.any? %>
+  $('#unit').removeClass('hidden');
+  <% @unit.errors.values.each do |message| %>
+    $("#unit").append($("<li />").html("<%= message.first.to_s %>"));
+  <% end %>
+<% else %>
+  $('#dialog').modal('toggle');
+  window.location = "<%= units_path %>";
+  $("#notice").html("<%= flash[:notice] %>");
+<% end %>

+ 5 - 3
config/initializers/inflections.rb

@@ -11,6 +11,8 @@
 # end
 
 # These inflection rules are supported but not enabled by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-#   inflect.acronym 'RESTful'
-# end
+ActiveSupport::Inflector.inflections do |inflect|
+  # inflect.acronym 'RESTful'
+  inflect.irregular "error", "errores"
+end
+

+ 6 - 2
config/routes.rb

@@ -199,8 +199,12 @@ Rails.application.routes.draw do
   root 'dashboard#index'
   get 'get_chart_data_for_dashboard' => 'dashboard#get_chart_data_for_dashboard'
 
-  ## NRIVERA: Se crea la ruta de units
-  get 'units' => 'units#index'
+  resources :units, except: [:show] do
+    post 'create' => 'units#create', defaults: { format: 'js' }
+    put 'edit' => 'units#update', defaults: { format: 'js' }
+  end
+  post 'update_unit_status/:id' => 'units#update_status', :as => "unit_status"
+
   get "getcounties/:state_id" => "application#getcounties", :as => "getcounties", :format => :json
 
   ## hcamargo: ruta  para cargar los productos