ecology 计算日期时间范围内早中午餐的次数

文章描述了如何在泛微系统中通过监听特定字段变化,处理出差期间早中晚餐报销的逻辑,包括根据时间范围计算报销次数并更新相应字段值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调用泛微内部的监听函数,绑定字段。

WfForm.bindDetailFieldChangeEvent("field10775,field10762,field10763", function(id, rowIndex, value) {
		var rowArr_dt2 = WfForm.getDetailAllRowIndexStr("detail_2").split(",");
		for (var i = 0; i < rowArr_dt2.length; i++) {
			var rowIndex = rowArr_dt2[i];
			if (rowIndex !== "") {
				betweenTimeRange(rowIndex);
			}
		}
	});	
function clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark) {
		WfForm.changeFieldValue(breakfastCountFieldMark, {
			value: 0
		});
		WfForm.changeFieldValue(lunchCountFieldMark, {
			value: 0
		});
		WfForm.changeFieldValue(dinnerCountFieldMark, {
			value: 0
		});
	}
	/**根据时间范围获取早中晚餐报销次数
	 * @param {Object} rowIndex
	 */
	function betweenTimeRange(rowIndex) {
		let fieldMark = "field10775_" + rowIndex; //遍历明细行字段
		let fieldvaluechts = WfForm.getFieldValue(fieldMark); //出差天数
		let breakfastCountFieldMark = "field10863_" + rowIndex;
		let lunchCountFieldMark = "field10864_" + rowIndex;
		let dinnerCountFieldMark = "field10865_" + rowIndex;
		let begiandate = WfForm.getFieldValue("field10760_" + rowIndex)
		let enddate = WfForm.getFieldValue("field10761_" + rowIndex)
		let cfsj = WfForm.getFieldValue("field10762_" + rowIndex) + ':00'; //出发时间
		let ddsj = WfForm.getFieldValue("field10763_" + rowIndex) + ':00'; //到达时间
		let begaintime = new Date(begiandate + " " + cfsj);
		let endtime = new Date(enddate + " " + ddsj);
		let breakfasttime = new Date(begiandate + " " + '6:00:00');
		let lunchtime = new Date(begiandate + " " + '13:00:00');
		let dinnertime = new Date(begiandate + " " + '19:00:00');
		let endbreakfasttime = new Date(endtime + " " + '6:00:00');
		let endlunchtime = new Date(endtime + " " + '13:00:00');
		let enddinnertime = new Date(endtime + " " + '19:00:00');
		let breakfastCount = 0;
		let lunchCount = 0;
		let dinnerCount = 0;
		if (fieldvaluechts < 1) {
			alert("差旅费报销:出差日期迄必需大于等于出差日期起")
		} else if (fieldvaluechts == 1) {
			if (begaintime <= breakfasttime && endtime >= dinnertime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(breakfastCountFieldMark, {
					value: 1
				});
				WfForm.changeFieldValue(lunchCountFieldMark, {
					value: 1
				});
				WfForm.changeFieldValue(dinnerCountFieldMark, {
					value: 1
				});
			} else if (begaintime <= breakfasttime && endtime < lunchtime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(breakfastCountFieldMark, {
					value: 1
				});
			} else if (begaintime <= breakfasttime && endtime < dinnertime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(breakfastCountFieldMark, {
					value: 1
				});
				WfForm.changeFieldValue(lunchCountFieldMark, {
					value: 1
				});
			} else if (begaintime <= lunchtime && endtime >= dinnertime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(lunchCountFieldMark, {
					value: 1
				});
				WfForm.changeFieldValue(dinnerCountFieldMark, {
					value: 1
				});
			} else if (begaintime <= lunchtime && endtime < dinnertime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(lunchCountFieldMark, {
					value: 1
				});
			} else if (begaintime <= dinnertime && endtime >= dinnertime) {
				clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
				WfForm.changeFieldValue(dinnerCountFieldMark, {
					value: 1
				});
			}
		} else if (fieldvaluechts == 2) {
			if (begaintime <= breakfasttime) {
				breakfastCount++;
				lunchCount++;
				dinnerCount++;
			} else if (begaintime <= lunchtime) {
				lunchCount++;
				dinnerCount++;
			} else if (begaintime <= dinnertime) {
				dinnerCount++;
			}
			if (endtime >= enddinnertime) {
				breakfastCount++;
				lunchCount++;
				dinnerCount++;
			} else if (endtime >= endlunchtime) {
				breakfastCount++;
				lunchCount++;
			} else if (endtime >= endbreakfasttime) {
				breakfastCount++;
			}
			clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
			WfForm.changeFieldValue(breakfastCountFieldMark, {
				value: breakfastCount
			});
			WfForm.changeFieldValue(lunchCountFieldMark, {
				value: lunchCount
			});
			WfForm.changeFieldValue(dinnerCountFieldMark, {
				value: dinnerCount
			});
			// 	alert("差旅费报销:计划出差2天")
		} else if (fieldvaluechts > 2) {
			if (begaintime <= breakfasttime) {
				breakfastCount++;
				lunchCount++;
				dinnerCount++;
			} else if (begaintime <= lunchtime) {
				lunchCount++;
				dinnerCount++;
			} else if (begaintime <= dinnertime) {
				dinnerCount++;
			}
			if (endtime >= enddinnertime) {
				breakfastCount++;
				lunchCount++;
				dinnerCount++;
			} else if (endtime >= endlunchtime) {
				breakfastCount++;
				lunchCount++;
			} else if (endtime >= endbreakfasttime) {
				breakfastCount++;
			}
			clearCountBreakfastLunchDinner(breakfastCountFieldMark, lunchCountFieldMark, dinnerCountFieldMark);
			breakfastCount = breakfastCount + parseInt(fieldvaluechts) - 2;
			lunchCount = lunchCount + parseInt(fieldvaluechts) - 2;
			dinnerCount = dinnerCount + parseInt(fieldvaluechts) - 2;
			WfForm.changeFieldValue(breakfastCountFieldMark, {
				value: breakfastCount
			});
			WfForm.changeFieldValue(lunchCountFieldMark, {
				value: lunchCount
			});
			WfForm.changeFieldValue(dinnerCountFieldMark, {
				value: dinnerCount
			});
			// 	alert("差旅费报销:计划出差大于2天")
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值