Browse Source

Added purchases to product track

Jacqueline Maldonado 7 years atrás
parent
commit
9df4efeb8f

File diff suppressed because it is too large
+ 5 - 1
app/controllers/products_controller.rb


+ 51 - 53
app/views/products/_products_track_dtl.html.erb

@@ -1,53 +1,51 @@
-										<% if !@sales.nil? %>
-										<div class="row">
-											<div class="col-md-12">
-												<div class="col-md-6 col-sm-3 col-xs-6 " >
-													<div class="text-center well" id="container_total_prods" style="margin-bottom: 0px">
-														<div class="font-grey-mint font-sm">Cantidad vendida</div>
-														<div class="uppercase font-hg font-blue-sharp" id="total_prods"> <%= @sales.sum(:quantity) %></div>
-													</div>
-												</div>
-												<div class="col-md-6 col-sm-3 col-xs-6 " >
-													<div class="text-center well" id="container_total_prods" style="margin-bottom: 0px">
-														<div class="font-grey-mint font-sm">Total de ingresos </div>
-														<div class="uppercase font-hg font-blue-sharp" id="total_prods"> <%= number_to_currency(@sales.sum(:total) , precision: 2) %></div>
-													</div>
-												</div>
-											</div>
-										</div>
-										<br>
-										<% end %>
-										<div class="row">
-											<div class="col-md-12">
-												<table class="table table-striped table-bordered table-hover tableadvanced"  >
-													<thead>
-														<tr>
-															<th>Folio Venta</th>
-															<th>Fecha</th>
-															<th>Punto de venta</th>
-															<th>Vendido por </th>
-															<th>Cantidad</th>
-															<th>Precio</th>
-															<th>Descto.</th>
-															<th>Importe</th>
-														</tr>
-													</thead>
-													<tbody>
-													<% if !@sales.nil? %>
-													<% @sales.each_with_index do |sale, key| %>
-														<tr>
-															<td><%= l(sale.sale.date_sale, :format => '%d/%m/%Y') %></td>
-															<td><%= sale.sale.sale_code %> </td>
-															<td><%= sale.sale.get_pointsale.name %></td>
-															<td><%= sale.sale.seller.name %> </td>
-															<td><%= sale.quantity %> </td>
-															<td><%= number_to_currency(sale.amount, precision: 2) %></td>
-															<td><%= number_to_currency(sale.discount, precision: 2) %></td>
-															<td><%= number_to_currency(sale.total, precision: 2) %></td>
-														</tr>
-													<% end %>
-													<% end %>
-													</tbody>
-												</table>
-											</div>
-										</div>
+<% unless @sales.nil? %>
+  <div class="row">
+    <div class="col-md-12">
+      <div class="col-md-6 col-sm-3 col-xs-6 " >
+        <div class="text-center well" id="container_total_prods" style="margin-bottom: 0px">
+          <div class="font-grey-mint font-sm">Cantidad vendida</div>
+          <div class="uppercase font-hg font-blue-sharp" id="total_prods"> <%= @total_quantity.to_i %></div>
+        </div>
+      </div>
+      <div class="col-md-6 col-sm-3 col-xs-6 " >
+        <div class="text-center well" id="container_total_prods" style="margin-bottom: 0px">
+          <div class="font-grey-mint font-sm">Total de ingresos </div>
+          <div class="uppercase font-hg font-blue-sharp" id="total_prods"> <%= number_to_currency(@total_sales, precision: 2) %></div>
+        </div>
+      </div>
+    </div>
+  </div>
+  <br>
+<% end %>
+<div class="row">
+  <div class="col-md-12">
+    <table class="table table-striped table-bordered table-hover tableadvanced">
+      <thead>
+        <tr>
+          <th>Folio Venta</th>
+          <th>Fecha</th>
+          <th>Punto de venta</th>
+          <th>Vendido por </th>
+          <th>Cantidad</th>
+          <th>Precio</th>
+          <th>Descto.</th>
+          <th>Importe</th>
+        </tr>
+      </thead>
+      <tbody>
+        <% @sales.each do |sale, key| %>
+          <tr>
+            <td><%= l(sale.sale.date_sale, format: '%d/%m/%Y') %></td>
+            <td><%= sale.sale.sale_code %> </td>
+            <td><%= sale.sale.get_pointsale.name %></td>
+            <td><%= sale.sale.seller.name %> </td>
+            <td><%= sale.quantity %> </td>
+            <td><%= number_to_currency(sale.amount, precision: 2) %></td>
+            <td><%= number_to_currency(sale.discount, precision: 2) %></td>
+            <td><%= number_to_currency(sale.total, precision: 2) %></td>
+          </tr>
+        <% end %>
+      </tbody>
+    </table>
+  </div>
+</div>

+ 45 - 0
app/views/products/_products_track_purchases_dtl.html.erb

@@ -0,0 +1,45 @@
+<% unless @purchases.nil? %>
+  <div class="row">
+    <div class="col-md-12">
+      <div class="col-md-6 col-sm-3 col-xs-6 " >
+        <div class="text-center well" id="container_total_prods" style="margin-bottom: 0px">
+          <div class="font-grey-mint font-sm">Cantidad comprada</div>
+          <div class="uppercase font-hg font-blue-sharp" id="total_prods"> <%= @total_quantity_purchases %></div>
+        </div>
+      </div>
+    </div>
+  </div>
+  <br>
+<% end %>
+<div class="row">
+  <div class="col-md-12">
+    <table class="table table-striped table-bordered table-hover tableadvanced">
+      <thead>
+        <tr>
+          <th>Folio compra</th>
+          <th>Fecha</th>
+          <th>Lugar</th>
+          <th>Proveedor</th>
+          <th>Cantidad</th>
+          <th>Capturó</th>
+        </tr>
+      </thead>
+      <tbody>
+        <% @purchases.each_with_index do |purchase_detail, key| %>
+          <tr>
+            <td><%= purchase_detail.purchase.purchase_code %> </td>
+            <td><%= l(purchase_detail.purchase.purchase_date, :format => '%d/%m/%Y') %></td>
+            <% if purchase_detail.purchase.pointsale.present? %>
+             <td><%= purchase_detail.purchase.pointsale.name %></td>
+            <% else %>
+              <td><%= purchase_detail.purchase.warehouse.name %></td>
+            <% end %>
+            <td><%= purchase_detail.purchase.supplier.nick_name %> </td>
+            <td><%= purchase_detail.quantity %> </td>
+            <td><%= purchase_detail.purchase.user.userid %> </td>
+          </tr>
+        <% end %>
+      </tbody>
+    </table>
+  </div>
+</div>

+ 199 - 180
app/views/products/product_track.html.erb

@@ -1,205 +1,224 @@
-	<!-- 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>Seguimiento de productos </h1>
-					</div>
-					<!-- END PAGE TITLE -->
+<!-- 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>Seguimiento de productos </h1>
 				</div>
+				<!-- END PAGE TITLE -->
 			</div>
-			<!-- END PAGE HEAD-->
-			<!-- BEGIN PAGE CONTENT BODY -->
-			<div class="page-content">
-				<div class="container-fluid">
-					<!-- BEGIN PAGE BREADCRUMBS -->
-					<ul class="page-breadcrumb breadcrumb">
-						<%= render_breadcrumbs :tag => :li, :separator => ' <i class="fa fa-circle"></i> ' %>
-					</ul>
-					<!-- END PAGE BREADCRUMBS -->
-					<div class="search-page search-content-3">
-						<div class="row">
-							<div class="col-md-12">
-								<div class="search-filter bordered">
-								<!-- <h4 class=" uppercase form-section"> Búsqueda de producto </h4> <hr> -->
-									<div class="form-group">
-										<div class="row">
-											<div class="col-md-6">
-												<div class="search-label uppercase"> Del </div>
-												<div class="col-md-6">
-													<!-- <div class='input-group date' id='begin_date'> -->
-													<div class="input-group input-medium date date-picker" data-date-format="dd/mm/yyyy">
-														<input id="start" type='text' class="form-control"/>
-														<span class="input-group-addon">
-															<span class="glyphicon glyphicon-calendar"></span>
-														</span>
-													</div>
-												</div>
-											</div>
-											<div class="col-md-6">
-												<div class="search-label uppercase"> Al </div>
-												<div class="col-md-6">
-													<!-- <div class='input-group date' id='end_date'> -->
-													<div class="input-group input-medium date date-picker" data-date-format="dd/mm/yyyy">
-														<input id="end" type='text' class="form-control"/>
-														<span class="input-group-addon">
-															<span class="glyphicon glyphicon-calendar"></span>
-														</span>
-													</div>
-												</div>
-											</div>
-										</div>
-									</div>
-									<div class=" form-group">
-										<div class="row">
-											<div class="col-md-6">
-												<div class="search-label uppercase">Producto <span class="required">*</span></div>
-												<div class="col-md-12">
+		</div>
+		<!-- END PAGE HEAD-->
+		<!-- BEGIN PAGE CONTENT BODY -->
+		<div class="page-content">
+			<div class="container-fluid">
+				<!-- BEGIN PAGE BREADCRUMBS -->
+				<ul class="page-breadcrumb breadcrumb">
+					<%= render_breadcrumbs :tag => :li, :separator => ' <i class="fa fa-circle"></i> ' %>
+				</ul>
+
+				<div class="page-content-inner">
+					<div class="row ">
+						<div class="portlet light">
+							<div class="portlet-title">
+								<div class="caption">
+									<i class="fa fa-location-arrow font-blue-dark"></i>
+									<span class="caption-subject font-blue-dark bold uppercase">Seguimiento de productos</span>
+								</div>
+							</div>
+							<div class="portlet-body form" id="tracking">
+								<div class="form-horizontal">
+									<div class="row">
+										<div class="form-group">
+										  <div class="col-md-6 col-sm-12">
+										  	<%= label_tag :begin_date, "Fecha", { class: "col-md-2 col-sm-1 control-label" } do %> Desde <% end %>
+											  <div class="col-sm-2 col-md-4" style="padding-left:0px;padding-right:0px;">
+											    <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-2 col-sm-1 control-label" } do %> Hasta <% end %>
+											  <div class="col-sm-2 col-md-4" style="padding-left:0px;padding-right:0px;">
+											    <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>
+										  </div>
+										</div><!--   -->
+										<div class="form-group">
+											<div class="col-md-5 col-sm-5">
+										  	<label class="col-md-3 col-sm-3 control-label" for="typeahead"> Producto <span class="required">*</span> </label>
+												<div class="col-md-9 col-sm-9">
 													<input class="form-control" type="text" id="typeahead">
-													<%= hidden_field_tag :product_id %>
-												</div>
-											</div>
-											<div class="col-md-6">
-												<div class="search-label uppercase">Punto de venta</div>
-												<div class="col-md-12">
-													<%= select_tag "pointsale", options_from_collection_for_select(Pointsale.vigentes, :id, :name), :include_blank => "Todas",  class: "form-control  input-medium" %>
 												</div>
+										  </div>
+											<div class="col-md-6 col-sm-6">
+												<%= label_tag :pointsale, "Punto de venta", class: "control-label col-md-3 col-sm-3" %>
+												<div class="col-md-6 col-sm-7">
+										      <%= select_tag "pointsale", options_from_collection_for_select(Pointsale.vigentes, :id, :name), include_blank: "Todos",  class: "form-control input-medium" %>
+										    </div>
+										    <button class="btn btn-icon-only blue" onclick="findSalesByPeriod()">
+	                        <i class="fa fa-search"></i>
+	                      </button>
 											</div>
 										</div>
 									</div>
-									<div class="search-filter-divider bg-grey-steel"></div>
-									<button class="btn green bold uppercase btn-block" onclick="findSalesByPeriod()">Buscar <i class="m-icon-swapright m-icon-white"></i> </button>
-								</div>
-							</div>
-						</div>
-					</div>
-					<!-- BEGIN PAGE CONTENT INNER -->
-					<div class="page-content-inner">
-						<div class="row ">
-							<div class="portlet light">
-								<div class="portlet-title">
-									<div class="caption">
-										<i class="fa fa-location-arrow font-blue-dark"></i>
-										<span class="caption-subject font-blue-dark bold uppercase">Seguimiento de productos</span>
-									</div>
 								</div>
-								<div class="portlet-body form" id="tracking">
-
-									<div class="product_track_search" id='track_detail'>
-										<%= render "products_track_dtl" %>
+								<div class="product_track_search">
+									<div class="row">
+									  <div class="col-md-12">
+									    <div class="tabbable-custom">
+									      <ul class="nav nav-tabs">
+									        <li class="active">
+									          <a href="#sales_tab" data-toggle="tab" aria-expanded="false">Ventas</a>
+									        </li>
+									        <li>
+									          <a href="#purchases_tab" data-toggle="tab" aria-expanded="false">Compras</a>
+									        </li>
+									      </ul>
+									      <div class="tab-content">
+									        <div class="tab-pane active" id="sales_tab">
+									          <div class="product_track_search" id='track_detail'>
+									            <!-- < %= render "products_track_dtl" %> -->
+									          </div>
+									        </div>
+									        <div class="tab-pane" id="purchases_tab">
+									          <div class="product_track_purchases_search" id='track_detail_purchases'>
+									            <!-- < %= render "products_track_purchases_dtl" %> -->
+									          </div>
+									        </div>
+									      </div>
+									    </div>
+									  </div>
 									</div>
-
 								</div>
 							</div>
 						</div>
 					</div>
-					<!-- END PAGE CONTENT INNER -->
 				</div>
+				<!-- END PAGE CONTENT INNER -->
 			</div>
-			<!-- END PAGE CONTENT BODY -->
-			<!-- END CONTENT BODY -->
 		</div>
-		<!-- END CONTENT -->
+		<!-- END PAGE CONTENT BODY -->
+		<!-- END CONTENT BODY -->
 	</div>
-	<!-- END CONTAINER -->
-	<script type="text/javascript">
-		var rows_selected = [];
-		var selectedProduct = null;
-		var timeout = null;
-		//para no avanzar cuando la cantidad a regresar sea mayor
-		var shouldProcess = false;
-		var sale_id = null;
+	<!-- END CONTENT -->
+</div>
+<!-- END CONTAINER -->
+<script type="text/javascript">
+	$(document).on("page:change", function() {
+    App.init();
+     $('#start').datetimepicker({
+      icons: {
+        date: "fa fa-calendar"
+      },
+      format: "DD/MM/YYYY"
+    });
 
-		var bloodhound = new Bloodhound({
-			datumTokenizer: function (d) {
-				return Bloodhound.tokenizers.whitespace(d.value);
-			},
-			queryTokenizer: Bloodhound.tokenizers.whitespace,
-			remote: {
-				url: '/find_products?query=%QUERY',
-				wildcard: '%QUERY'
-			}
-		});
-		bloodhound.initialize();
+    $('#end').datetimepicker({
+      icons: {
+        date: "fa fa-calendar"
+      },
+      format: "DD/MM/YYYY"
+    });
+  });
 
-		$('#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>')
-				}
-		});
+	var rows_selected = [];
+	var selectedProduct = null;
+	var timeout = null;
+	//para no avanzar cuando la cantidad a regresar sea mayor
+	var shouldProcess = false;
+	var sale_id = null;
 
-		$('#typeahead').bind('typeahead:selected', function(event, datum, name) {
-			selectedProduct = datum;
-			$('#btn_search_by_period').attr('disabled', false);
-		});
-		//buscar ventas por periodo de tiempo
-		function findSalesByPeriod() {
-			var product = selectedProduct ? selectedProduct.id : '';
-			var pointsale = $('#pointsale').val();
-			// var start = $("#start").val();
-   //  		var end = $("#end").val();
+	var bloodhound = new Bloodhound({
+		datumTokenizer: function (d) {
+			return Bloodhound.tokenizers.whitespace(d.value);
+		},
+		queryTokenizer: Bloodhound.tokenizers.whitespace,
+		remote: {
+			url: '/find_products?query=%QUERY',
+			wildcard: '%QUERY'
+		}
+	});
+	bloodhound.initialize();
 
-    		var start = moment($("#start").val(), "DD-MM-YYYY").format('YYYY-MM-DD');
-    		var end = moment($("#end").val(), "DD-MM-YYYY").format('YYYY-MM-DD');
-    		$('#product_id').val(product);
+	$('#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>')
+			}
+	});
+
+	$('#typeahead').bind('typeahead:selected', function(event, datum, name) {
+		selectedProduct = datum;
+		$('#btn_search_by_period').attr('disabled', false);
+	});
 
-			if ($("#start").val() && $("#end").val()) {
-				if (product) {
-					App.blockUI({
-						target: $("#track_detail"),
-						animate: true
-					});
+	//buscar ventas por periodo de tiempo
+	function findSalesByPeriod() {
+		var product = selectedProduct ? selectedProduct.id : '';
+		var pointsale = $('#pointsale').val();
+		var start = moment($("#start").data("date"), "DD-MM-YYYY").startOf('day').format('YYYY-MM-DD HH:mm:ss');
+    var end = moment($("#end").data("date"), "DD-MM-YYYY").add(23, 'hours').add(59, 'minutes').add(59, 'seconds').format('YYYY-MM-DD HH:mm:ss');
+		$('#product_id').val(product);
 
-					$.ajax({
-						type: "get",
-						url:  '/product_track/',
-						data: {
-							start_date: start,
-	          				end_date: end,
-							product_id: product,
-							pointsale_id: pointsale
-						},
-						dataType: 'script',
-						success: function(data) {
-							App.unblockUI($("#track_detail"));
-						}
-					});
-				} else {
-					toastr["error"]("Es necesario indicar un producto.");
-				}
-			}else{
-				toastr["error"]("Es necesario indicar fechas.");
+		if ($("#start").val() && $("#end").val()) {
+			if (product) {
+				$.ajax({
+					type: "get",
+					url: '/product_track/',
+					data: {
+						start_date: start,
+    				end_date: end,
+						product_id: product,
+						pointsale_id: pointsale
+					},
+					dataType: 'script',
+					success: function(data) {
+						App.unblockUI($("#track_detail"));
+						App.unblockUI($("#track_detail_purchases"));
+					}
+				});
+			} else {
+				toastr["error"]("Es necesario indicar un producto.");
 			}
+		} else {
+			toastr["error"]("Es necesario indicar fechas.");
 		}
-
-	</script>
+	}
+</script>

+ 3 - 10
app/views/products/product_track.js.erb

@@ -1,10 +1,3 @@
-
-// var table = $('#track_detail').DataTable();
-// $('#track_detail').dataTable().fnClearTable();
-// <% @sales.each_with_index do |sale, key| %>
-// 	var row = $('<%= j render partial: "products_track_dtl", locals: {sale: sale} %>');
-// 	table.row.add(row).draw();
-// <% end %>
-
-$('.product_track_search').html('<%= j render "products_track_dtl" %>');
-TableAdvanced.init();
+$('#track_detail').html('<%= j render "products_track_dtl" %>');
+$('#track_detail_purchases').html('<%= j render "products_track_purchases_dtl" %>');
+TableAdvanced.init();