获取日期范围开头和结尾的属性值

时间:2016-10-31 14:22:19

标签: ruby-on-rails

我有一个数据库表 stockmovements ,其中包含DATE,PRODUCT,UNITS,TYPE,STOCK列。当某个库存移动完成时,STOCK保存该日期的库存值。 TYPE可以购买或出售或退货。

我按产品分组,以便我视图中表格的任何一行都显示产品。然后我想创建2列。股票开始和股票结束。显示日期范围的第一个和最后一个日期的股票价值。因此,稍后我要申请I过滤10月1日 - 10月31日,2列将显示10月1日的股票价值和10月31日的股票价值。

如果未应用过滤器,列将显示数据库中所有值中最早和最新库存移动的库存值。

在中间列中显示每个stockmovement类型的单位。这样最终将是产品,库存开始,购买,出售,退货,库存结束。这只是为了给出一般逻辑的概念,但这对问题并不重要。

我在控制器中有这个:

@stockmovements = Stockmovement.all.group(:PRODUCT)

我应该在观点中添加什么:

 <td><%= number_to_human stockmovement.STOCK, precision: 0 %></td>

获取日期范围开头和结尾的股票价值?或者应该在模型中完成?我基本上需要STOCK,其中DATE =开始日期和STOCK,其中DATE =结束日期。但我找不到任何帮助。

1 个答案:

答案 0 :(得分:0)

这会给你一个值的哈希,{location =&gt; [opening_value,closing_value]}

# replace following with whatever dates you need, probably 
# from params (input form)

from_date = DateTime.parse('2016-10-01')
to_date = DateTime.parse('2016-10-31').end_of_day 

@stockopenclose = {}

products = Stockmovement.where('DATE >= ? AND DATE <= ?',from_date, to_date).pluck(:product).uniq.sort

products.each do |product|

  movements = Stockmovement.where('DATE >= ? AND DATE <= ? AND PRODUCT = ?',from_date, to_date, product)

  opening_value = movements.sort('DATE ASC').limit(1).pluck('STOCK').first
  closing_value = movements.sort('DATE DEC').limit(1).pluck('STOCK').first

  @stockopenclose[product] = [opening_value, closing_value]

end

然后,您可以引用<%= @stockopenclose[location][0] %>表示开头价值,<%= @stockopenclose[location][1] %>表示结算,假设您按位置进行迭代。

但是有一些问题......

开盘价时的股票将是第一次移动后的值,因此它不会成为真正的开盘价。我认为开幕式需要......

stock, units = movements.sort('DATE ASC').limit(1).pluck('STOCK', 'UNITS').first
opening_value = stock.to_i - units.to_i

其次,这并不能处理缓慢移动的股票,即期间没有活动的股票不会出现在列表中,所以如果这个报告是库存分析,那么它是不足的。 / p>