public function testDefaultCalculatedDates()
 {
     $now = time();
     $thing = new ThingWithCalculatedDates();
     $thingNowValue = $thing->now;
     $this->assertEquals(DateTimeUtil::convertTimestampToDbFormatDateTime($now), $thing->now);
     $this->assertTrue($thing->save());
     $this->assertEquals($thingNowValue, $thing->now);
     $stamp = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $now);
     $this->assertEquals($stamp, $thing->today);
     $stamp = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $now + 24 * 60 * 60);
     $this->assertEquals($stamp, $thing->tomorrow);
     $stamp = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $now - 24 * 60 * 60);
     $this->assertEquals($stamp, $thing->yesterday);
 }
 public function populateModel(&$model)
 {
     assert('$model instanceof Opportunity');
     $opportunityRandomData = ZurmoRandomDataUtil::getRandomDataByModuleAndModelClassNames('OpportunitiesModule', 'Opportunity');
     parent::populateModel($model);
     $name = RandomDataUtil::getRandomValueFromArray($opportunityRandomData['names']);
     $model->name = $name;
     $stage = RandomDataUtil::getRandomValueFromArray(static::getCustomFieldDataByName('SalesStages'));
     $source = RandomDataUtil::getRandomValueFromArray(static::getCustomFieldDataByName('LeadSources'));
     $model->stage->value = $stage;
     $model->source->value = $source;
     $futureTimeStamp = time() + mt_rand(1, 200) * 60 * 60 * 24;
     $closeDate = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $futureTimeStamp);
     $model->closeDate = $closeDate;
     $model->amount->value = mt_rand(5, 350) * 1000;
 }
 public function testValidAndInvalidDateDateTimeValidation()
 {
     $language = Yii::app()->getLanguage();
     $this->assertEquals($language, 'en');
     $this->assertEquals(false, CDateTimeParser::parse('04:04:1980', DatabaseCompatibilityUtil::getDateFormat()));
     $this->assertEquals(null, DateTimeUtil::resolveValueForDateLocaleFormattedDisplay('04:04:1980'));
     $model = new DateDateTime();
     $model->aDate = '04:04:1980';
     $model->aDateTime = 'notATimeStamp';
     $saved = $model->save();
     $this->assertFalse($saved);
     $compareData = array('aDate' => array('A Date must be date.'), 'aDateTime' => array('A Date Time must be datetime.'));
     $this->assertEquals($compareData, $model->getErrors());
     //Now test setting an integer for dateTime which is wrong
     $model = new DateDateTime();
     $model->aDate = '1981-07-05';
     $model->aDateTime = 1241341412421;
     $saved = $model->save();
     $this->assertFalse($saved);
     $compareData = array('aDateTime' => array('A Date Time must be datetime.'));
     $this->assertEquals($compareData, $model->getErrors());
     //Now test a successful validation.
     $this->assertEquals('M/d/yy', DateTimeUtil::getLocaleDateFormat());
     $model = new DateDateTime();
     $model->aDate = '1981-07-05';
     $model->aDateTime = '1981-07-05 04:04:04';
     $saved = $model->save();
     $this->assertEquals(array(), $model->getErrors());
     $this->assertTrue($saved);
     $this->assertNull($model->aDateTime2);
     //now set DateTime2 and test if you save and then clear it that it is behaving properly.
     $model->aDateTime2 = '1981-07-05 04:04:04';
     $saved = $model->save();
     $this->assertTrue($saved);
     $this->assertEquals('1981-07-05 04:04:04', $model->aDateTime2);
     $model->aDateTime2 = null;
     $saved = $model->save();
     $this->assertTrue($saved);
     $id = $model->id;
     $model->forget();
     $model = DateDateTime::getById($id);
     $this->assertNull($model->aDateTime2);
 }
 public function testCalculateNew()
 {
     //Test Today.
     $todayDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::TODAY, new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())));
     $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp());
     $this->assertEquals($today, $todayDateStamp);
     //Test Tomorrow.
     $tomorrowDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::TOMORROW, new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())));
     $tomorrowDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $tomorrow = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $tomorrowDateTime->getTimeStamp() + 60 * 60 * 24);
     $this->assertEquals($tomorrow, $tomorrowDateStamp);
     //Test Yesterday.
     $yesterdayDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::YESTERDAY, new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())));
     $yesterdayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $yesterday = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $yesterdayDateTime->getTimeStamp() - 60 * 60 * 24);
     $this->assertEquals($yesterday, $yesterdayDateStamp);
     //Test Now.
     $nowDateTimeStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::NOW, new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())));
     $nowDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $this->assertWithinTolerance($nowDateTime->getTimeStamp(), DateTimeUtil::convertDbFormatDateTimeToTimestamp($nowDateTimeStamp), 1);
     //Now test all calculations using a different time zone.
     $this->assertNotEquals('Europe/Malta', Yii::app()->timeZoneHelper->getForCurrentUser());
     //Test Today.
     $todayDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::TODAY, new DateTime(null, new DateTimeZone('Europe/Malta')));
     $todayDateTime = new DateTime(null, new DateTimeZone('Europe/Malta'));
     $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp());
     $this->assertEquals($today, $todayDateStamp);
     //Test Tomorrow.
     $tomorrowDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::TOMORROW, new DateTime(null, new DateTimeZone('Europe/Malta')));
     $tomorrowDateTime = new DateTime(null, new DateTimeZone('Europe/Malta'));
     $tomorrow = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $tomorrowDateTime->getTimeStamp() + 60 * 60 * 24);
     $this->assertEquals($tomorrow, $tomorrowDateStamp);
     //Test Yesterday.
     $yesterdayDateStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::YESTERDAY, new DateTime(null, new DateTimeZone('Europe/Malta')));
     $yesterdayDateTime = new DateTime(null, new DateTimeZone('Europe/Malta'));
     $yesterday = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $yesterdayDateTime->getTimeStamp() - 60 * 60 * 24);
     $this->assertEquals($yesterday, $yesterdayDateStamp);
     //Test Now.
     $nowDateTimeStamp = DateTimeCalculatorUtil::calculateNew(DateTimeCalculatorUtil::NOW, new DateTime(null, new DateTimeZone('Europe/Malta')));
     $nowDateTime = new DateTime(null, new DateTimeZone('Europe/Malta'));
     $this->assertWithinTolerance($nowDateTime->getTimeStamp(), DateTimeUtil::convertDbFormatDateTimeToTimestamp($nowDateTimeStamp), 1);
 }
예제 #5
0
 protected function setAndGetDateAttribute($attributeName, $withDefaultData)
 {
     $this->assertTrue(isset($attributeName) && $attributeName != '');
     $this->assertTrue(isset($withDefaultData) && is_bool($withDefaultData));
     $attributeForm = new DateAttributeForm();
     $attributeForm->attributeName = $attributeName;
     $attributeForm->attributeLabels = array('de' => 'Test Date 2 de', 'en' => 'Test Date 2 en', 'es' => 'Test Date 2 es', 'fr' => 'Test Date 2 fr', 'it' => 'Test Date 2 it');
     $attributeForm->isAudited = true;
     $attributeForm->isRequired = true;
     if ($withDefaultData) {
         $attributeForm->defaultValueCalculationType = DateTimeCalculatorUtil::YESTERDAY;
     }
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName(new Account());
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new Account(), $attributeName . 'Cstm');
     $this->assertEquals('Date', $attributeForm->getAttributeTypeName());
     $this->assertEquals($attributeName . 'Cstm', $attributeForm->attributeName);
     $compareAttributeLabels = array('de' => 'Test Date 2 de', 'en' => 'Test Date 2 en', 'es' => 'Test Date 2 es', 'fr' => 'Test Date 2 fr', 'it' => 'Test Date 2 it');
     $this->assertEquals($compareAttributeLabels, $attributeForm->attributeLabels);
     $this->assertEquals(true, $attributeForm->isAudited);
     $this->assertEquals(true, $attributeForm->isRequired);
     if ($withDefaultData) {
         $this->assertEquals(DateTimeCalculatorUtil::YESTERDAY, $attributeForm->defaultValueCalculationType);
         //Confirm default calculation loads correct default value for Account.
         $account = new Account();
         $yesterdayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
         $yesterday = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $yesterdayDateTime->getTimeStamp() - 60 * 60 * 24);
         $this->assertEquals($yesterday, $account->{$attributeName . 'Cstm'});
     } else {
         $account = new Account();
         $this->assertEquals(null, $attributeForm->defaultValueCalculationType);
         $this->assertEquals(null, $account->{$attributeName . 'Cstm'});
     }
 }
 public function testGetMetadataForDynamicDateTimeAttributeThatIsOnManyRelatedModel()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $searchForm = new ASearchFormTestModel(new MixedRelationsModel());
     //Make sure the timeZone is different than UTC for testing.
     Yii::app()->user->userModel->timeZone = 'America/Chicago';
     //TEST when no value present
     $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateDateTimeADate__Date', null);
     $compareData = array(array('manyMany' => array('value' => array('aDate' => null))));
     $this->assertEquals($compareData, $metadata);
     //Test Date = Today
     $value = array();
     $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY;
     $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateDateTimeADateTime__DateTime', $value);
     $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp());
     $compareData = array(array('manyMany' => array('value' => array('aDateTime' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('manyMany' => array('value' => array('aDateTime' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true)));
     $this->assertEquals($compareData, $metadata);
 }
 public function testGetDateFormat()
 {
     $this->assertEquals('yyyy-MM-dd', DatabaseCompatibilityUtil::getDateFormat());
 }
 public function testSearchFormDynamicAttributes()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $searchAttributes = array('aaaMember' => 'Vomitorio Corp', 'bbb' => array('relatedData' => true, 'ccc' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null), 'eee' => array('relatedData' => true, 'eeeMember' => 'eeeMemberValue'), 'iii' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null)))));
     $metadataAdapter = new SearchDataProviderMetadataAdapter(new AAA(false), 1, $searchAttributes);
     $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp());
     $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7);
     $metadata = $metadataAdapter->getAdaptedMetadata();
     $compareClauses = array(1 => array('attributeName' => 'aaaMember', 'operatorType' => 'startsWith', 'value' => 'Vomitorio Corp'), 2 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'))), 3 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)))), 4 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)))), 5 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'eee', 'relatedModelData' => array('attributeName' => 'eeeMember', 'operatorType' => 'startsWith', 'value' => 'eeeMemberValue')))), 6 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04')))), 7 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today))))), 8 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today))))));
     $compareStructure = '1 and (2) and (3 and 4) and 5 and (6) and (7 and 8)';
     $this->assertEquals($compareClauses, $metadata['clauses']);
     $this->assertEquals($compareStructure, $metadata['structure']);
 }
 public function testSearchFormDynamicAttributes()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $searchAttributes = array('date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null));
     $searchForm = new MixedRelationsModelSearchFormTestModel(new MixedRelationsModel());
     $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $super->id, $searchAttributes);
     $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser()));
     $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp());
     $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7);
     $metadata = $metadataAdapter->getAdaptedMetadata();
     $compareClauses = array(1 => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'), 2 => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)), 3 => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)));
     $compareStructure = '(1) and (2 and 3)';
     $this->assertEquals($compareClauses, $metadata['clauses']);
     $this->assertEquals($compareStructure, $metadata['structure']);
 }
예제 #10
0
 /**
  * Given an integer representing a count of days from the present day, returns a DB formatted date stamp based
  * on that calculation.
  * @param integer $daysFromNow
  */
 public static function calculateNewByDaysFromNow($daysFromNow, DateTime $dateTime)
 {
     assert('is_int($daysFromNow)');
     $dateTime->modify($daysFromNow . ' day');
     return Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $dateTime->getTimestamp());
 }
예제 #11
0
 public static function getLastDayOfAMonthDate($stringTime = null)
 {
     assert('is_string($stringTime) || $stringTime == null');
     $dateTime = new DateTime($stringTime);
     $dateTime->modify('last day of this month');
     return Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $dateTime->getTimestamp());
 }
예제 #12
0
 protected function sanitizeAndResolveThirdValue()
 {
     if ($this->trigger->valueEvaluationType == 'Date') {
         $todayDate = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), time());
         $todayDateTime = DateTimeUtil::resolveDateAsDateTime($todayDate);
         return $this->trigger->resolveNewTimeStampForThirdValueDuration(strtotime($todayDateTime));
     } elseif ($this->trigger->valueEvaluationType == 'DateTime') {
         $timeZone = date_default_timezone_get();
         date_default_timezone_set('GMT');
         $timeStamp = $this->trigger->resolveNewTimeStampForThirdValueDuration(time());
         date_default_timezone_set($timeZone);
         return $timeStamp;
     } else {
         throw new NotSupportedException();
     }
 }
예제 #13
0
 /**
  * Gets tomorrows date.
  * @return string
  */
 public static function getTomorrowsDate()
 {
     $dateTime = new DateTime();
     $dateTime->modify('tomorrow');
     return Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $dateTime->getTimestamp());
 }
예제 #14
0
 /**
  * Gets end date.
  * @param string $dateRangeType
  * @return string
  */
 public static function getEndDate($dateRangeType)
 {
     assert('is_string($dateRangeType)');
     if ($dateRangeType == SavedCalendar::DATERANGE_TYPE_MONTH) {
         $dateTime = new DateTime();
         $dateTime->modify('first day of next month');
         return Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $dateTime->getTimestamp());
     }
     if ($dateRangeType == SavedCalendar::DATERANGE_TYPE_WEEK) {
         $dateTime = new DateTime('Monday next week');
         return Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $dateTime->getTimestamp());
     }
     if ($dateRangeType == SavedCalendar::DATERANGE_TYPE_DAY) {
         return DateTimeUtil::getTomorrowsDate();
     }
 }