func TestDeviceUpdateTotalCount(t *testing.T) {
	gorm.Delete(DB.Unscoped().NewScope(&DeviceOut{}))
	gorm.Delete(DB.Unscoped().NewScope(&Device{}))
	gorm.Delete(DB.Unscoped().NewScope(&ReportItem{})) // call without callbacks
	felix, wensanlu := employeeAndWarehouse()
	iphone := deviceiPhone(wensanlu.ID)
	from, _ := getOrCreateReportItem(wensanlu, &iphone, 0)

	dOut := DeviceOut{
		FromReportItemID: from.ID,
		ToWhomID:         felix.ID,
		Quantity:         10,
		Date:             time.Now(),
		ByWhomID:         felix.ID,
	}

	DB.Create(&dOut)

	iphone.TotalQuantity = 9
	iphone.Code = "NEWIPHONE6"
	err := DB.Save(iphone).Error
	if err == nil {
		t.Error("should have error")
	}

	iphone.TotalQuantity = 10
	err = DB.Save(iphone).Error
	if err != nil {
		t.Error(err)
	}
	ri, _ := getOrCreateReportItem(wensanlu, &iphone, 0)
	if ri.Count != 0 {
		t.Error("update total quantity didn't change report item")
	}
}
Exemple #2
0
func syncToProductionAfterDelete(scope *gorm.Scope) {
	if !scope.HasError() {
		if ok, clone := getModeAndNewScope(scope); ok {
			gorm.Delete(clone)
		}
	}
}
Exemple #3
0
func syncDeleteFromProductionToDraft(scope *gorm.Scope) {
	if !scope.HasError() {
		if ok, clone := isProductionModeAndNewScope(scope); ok {
			gorm.Delete(clone)
		}
	}
}
Exemple #4
0
func deleteScope(scope *gorm.Scope) {
	if !scope.HasError() {
		_, supportedModel := scope.InstanceGet("publish:supported_model")
		if supportedModel && IsDraftMode(scope.DB()) {
			scope.Raw(
				fmt.Sprintf("UPDATE %v SET deleted_at=%v, publish_status=%v %v",
					scope.QuotedTableName(),
					scope.AddToVars(gorm.NowFunc()),
					scope.AddToVars(DIRTY),
					scope.CombinedConditionSql(),
				))
			scope.Exec()
		} else {
			gorm.Delete(scope)
		}
	}
}
func TestConsumableInAndOut(t *testing.T) {
	gorm.Delete(DB.Unscoped().NewScope(&ConsumableIn{}))
	gorm.Delete(DB.Unscoped().NewScope(&ConsumableOut{}))
	gorm.Delete(DB.Unscoped().NewScope(&Device{}))
	gorm.Delete(DB.Unscoped().NewScope(&ReportItem{})) // call without callbacks

	felix, wensanlu := employeeAndWarehouse()
	ink := deviceInk(wensanlu.ID)
	from, _ := getOrCreateReportItem(wensanlu, &ink, 0)

	cOut := ConsumableOut{
		ReportItemID: from.ID,
		ToWhomID:     felix.ID,
		Quantity:     5,
		Date:         time.Now(),
		ByWhomID:     felix.ID,
	}

	DB.Create(&cOut)

	var ri *ReportItem
	ri, _ = getOrCreateReportItem(wensanlu, &ink, 0)

	if ri.ID == 0 {
		t.Error("report item not created")
	}

	cOut2 := cOut
	cOut2.ID = 0
	DB.Create(&cOut2)
	ri, _ = getOrCreateReportItem(wensanlu, &ink, 0)

	if ri.Count != 10 {
		t.Error("report item count updated wrong, should be 10")
	}

	DB.Delete(&cOut2)

	ri, _ = getOrCreateReportItem(wensanlu, &ink, 0)
	if ri.Count != 15 {
		t.Error("report item count updated wrong, should be 15")
	}

	inFrom, _ := getOrCreateReportItem(wensanlu, &ink, 0)
	cIn := &ConsumableIn{
		ReportItemID: inFrom.ID,
		Quantity:     3,
		Date:         time.Now(),
		ByWhomID:     felix.ID,
	}
	DB.Create(cIn)
	ri, _ = getOrCreateReportItem(wensanlu, &ink, 0)

	if ri.Count != 18 {
		t.Error("report item count updated wrong, should be 18")
	}

	DB.Delete(&cIn)
	ri, _ = getOrCreateReportItem(wensanlu, &ink, 0)
	if ri.Count != 15 {
		t.Error("report item count updated wrong, should be 15 again")
	}
}
func TestDeviceOutAndIn(t *testing.T) {
	gorm.Delete(DB.Unscoped().NewScope(&DeviceIn{}))
	gorm.Delete(DB.Unscoped().NewScope(&DeviceOut{}))
	gorm.Delete(DB.Unscoped().NewScope(&Device{}))
	gorm.Delete(DB.Unscoped().NewScope(&ReportItem{})) // call without callbacks

	felix, wensanlu := employeeAndWarehouse()
	iphone := deviceiPhone(wensanlu.ID)
	from, _ := getOrCreateReportItem(wensanlu, &iphone, 0)

	dOut := DeviceOut{
		FromReportItemID: from.ID,
		ToWhomID:         felix.ID,
		Quantity:         5,
		Date:             time.Now(),
		ByWhomID:         felix.ID,
	}

	DB.Create(&dOut)

	var ri *ReportItem
	ri, _ = getOrCreateReportItem(felix, &iphone, 0)

	if ri.ID == 0 {
		t.Error("report item not created")
	}

	dOut2 := dOut
	dOut2.ID = 0
	DB.Create(&dOut2)
	ri, _ = getOrCreateReportItem(felix, &iphone, 0)

	if ri.Count != 10 {
		t.Error("report item count updated wrong, should be 10")
	}

	DB.Delete(&dOut2)

	ri, _ = getOrCreateReportItem(felix, &iphone, 0)
	if ri.Count != 5 {
		t.Error("report item count updated wrong, should be 5")
	}

	inFrom, _ := getOrCreateReportItem(felix, &iphone, 0)
	dIn := &DeviceIn{
		FromReportItemID: inFrom.ID,
		Quantity:         3,
		ToWarehouseID:    wensanlu.ID,
		Date:             time.Now(),
		ByWhomID:         felix.ID,
	}
	DB.Create(dIn)

	if dIn.ToWarehouseName != wensanlu.Name {
		t.Error("ToWarehouseName not updated correctly")
	}

	ri, _ = getOrCreateReportItem(felix, &iphone, 0)

	if ri.Count != 2 {
		t.Error("report item count updated wrong, should be 2")
	}

	DB.Delete(&dIn)
	ri, _ = getOrCreateReportItem(felix, &iphone, 0)
	if ri.Count != 5 {
		t.Error("report item count updated wrong, should be 5 again")
	}

	dOut2.Quantity = 15
	dOut2.ID = 0
	DB.Create(&dOut2)
	dIn2 := dIn
	dIn2.ID = 0
	dIn2.Quantity = 20
	DB.Create(&dIn2)
	err := DB.Delete(&dOut2).Error
	if err == nil {
		t.Error("should not be able to delete after returned")
	}
}