public function getNumber() { $config = ActiveRecordModel::getApplication()->getConfig(); $startAt = $config->get('SequentialInvoiceNumber_START_AT'); $prefix = $config->get('SequentialInvoiceNumber_PREFIX'); $suffix = $config->get('SequentialInvoiceNumber_SUFFIX'); // get last finalized order $last = array_pop(ActiveRecord::getRecordSetArray('CustomerOrder', $this->getSelectFilter())); $lastNumber = $last ? $last['invoiceNumber'] : $startAt; if (substr($lastNumber, 0, strlen($prefix)) == $prefix) { $lastNumber = substr($lastNumber, strlen($prefix)); } if (substr($lastNumber, -1 * strlen($suffix)) == $suffix) { $lastNumber = substr($lastNumber, 0, -1 * strlen($suffix)); } preg_match('/[0-9]+/', $lastNumber, $matches); $lastNumber = array_shift($matches); if ($lastNumber < $startAt) { $lastNumber = $startAt; } // avoid selecting the same order if the invoice number is already taken $this->getSelectFilter()->mergeCondition(neq('CustomerOrder.ID', $last['ID'])); $lastNumber += max($config->get('SequentialInvoiceNumber_STEP'), 1); $lastNumber = str_pad($lastNumber, $config->get('SequentialInvoiceNumber_MIN_LENGTH'), '0', STR_PAD_LEFT); $lastNumber = $prefix . $lastNumber . $suffix; return $lastNumber; }
<?php use org\rhaco\store\db\Q; \test\model\NewDao::create_table(); $obj = new \test\model\NewDao(); neq(null, $obj); \test\model\NewDao::find_delete(); eq(0, \test\model\NewDao::find_count()); $obj = new \test\model\NewDao(); $obj->save(); $obj = new \test\model\NewDao(); $obj->value(null); $obj->save(); $obj = new \test\model\NewDao(); $obj->value(''); $obj->save(); eq(1, \test\model\NewDao::find_count(Q::eq('value', ''))); eq(2, \test\model\NewDao::find_count(Q::eq('value', null))); eq(3, \test\model\NewDao::find_count()); $r = array(null, null, ''); $i = 0; foreach (\test\model\NewDao::find(Q::order('id')) as $o) { eq($r[$i], $o->value()); $i++; }
<?php \test\db\UniqueCodeDigit::create_table(); \test\db\UniqueCodeDigit::find_delete(); $obj = new \test\db\UniqueCodeDigit(); eq(null, $obj->code1()); eq(null, $obj->code2()); eq(null, $obj->code3()); $obj->save(); foreach (\test\db\UniqueCodeDigit::find() as $o) { neq(null, $o->code1()); neq(null, $o->code2()); neq(null, $o->code3()); eq(32, strlen($o->code1())); eq(10, strlen($o->code2())); eq(40, strlen($o->code3())); eq(true, ctype_digit($o->code1())); eq(true, ctype_digit($o->code2())); eq(true, ctype_digit($o->code3())); neq('000', substr($o->code2(), 0, 3)); neq('000', substr($o->code2(), -3)); }
\test\model\UniqueCodeIgnore::find_delete(); $i = 0; while (true) { try { $obj = new \test\model\UniqueCodeIgnore(); eq(null, $obj->code1()); $obj->save(); break; } catch (\org\rhaco\store\db\exception\GenerateUniqueCodeRetryLimitOverException $e) { if ($i++ > 1000) { throw $e; } } } foreach (\test\model\UniqueCodeIgnore::find() as $o) { neq(null, $o->code1()); eq(1, strlen($o->code1())); eq(true, ctype_digit($o->code1())); eq('9', $o->code1()); } \test\model\DoublePrimary::create_table(); \test\model\DoublePrimary::find_delete(); $obj = new \test\model\DoublePrimary(); $obj->id1(1)->id2(1)->value("hoge")->save(); $p = new \test\model\DoublePrimary(); eq("hoge", $p->id1(1)->id2(1)->sync()->value()); \test\model\LimitVerify::create_table(); \test\model\LimitVerify::find_delete(); $obj = new \test\model\LimitVerify(); $obj->value1("123"); $obj->value2(3);
eq(2, sizeof($result)); eq("2008/12/24 10:00:00", $result[0]->fm_updated()); $c = 0; for ($i = 0; $i < 10; $i++) { $a = $b = array(); foreach (\test\model\Find::find_all(Q::random_order()) as $o) { $a[] = $o->id(); } foreach (\test\model\Find::find_all(Q::random_order()) as $o) { $b[] = $o->id(); } if ($a === $b) { $c++; } } neq(10, $c); $result = \test\model\Find::find_all(Q::ob(Q::b(Q::eq("value1", "abc")), Q::b(Q::eq("value2", "EDC")))); eq(2, sizeof($result)); eq("EDC", \test\model\Find::find_get(Q::eq("value1", "jkl"))->value2()); $i = 0; $r = array("abc", "def", "ghi", "jkl"); foreach (\test\model\RefFind::find() as $obj) { eq(isset($r[$i]) ? $r[$i] : null, $obj->value()); $i++; } eq(4, $i); $i = 0; $r = array("abc"); foreach (\test\model\RefRefFind::find() as $obj) { eq(isset($r[$i]) ? $r[$i] : null, $obj->value()); $i++;
<?php \test\db\UniqueCode::create_table(); \test\db\UniqueCode::find_delete(); $obj = new \test\db\UniqueCode(); eq(null, $obj->code1()); eq(null, $obj->code2()); eq(null, $obj->code3()); $obj->save(); foreach (\test\db\UniqueCode::find() as $o) { neq(null, $o->code1()); neq(null, $o->code2()); neq(null, $o->code3()); eq(32, strlen($o->code1())); eq(10, strlen($o->code2())); eq(40, strlen($o->code3())); }
<?php $b = new \testman\Browser(); $b->do_get(url('test_index::csrf')); eq(200, $b->status()); meq('<result>', $b->body()); $b->do_post(url('test_index::csrf')); eq(403, $b->status()); meq('<error>', $b->body()); $b->do_get(url('test_index::csrf')); eq(200, $b->status()); meq('<result>', $b->body()); $no = null; if (\org\rhaco\Xml::set($xml, $b->body(), 'csrftoken')) { $no = $xml->value(); } neq(null, $no); $b->vars('csrftoken', $no); $b->do_post(url('test_index::csrf')); eq(200, $b->status()); meq('<result>', $b->body()); $b->do_get(url('test_index::csrf_template')); eq(200, $b->status()); meq('<form><input type="hidden" name="csrftoken"', $b->body()); meq('<form method="post"><input type="hidden" name="csrftoken"', $b->body()); meq('<form method="get"><input type="hidden" name="csrftoken"', $b->body()); meq(sprintf('<form action="%s"><input type="hidden" name="csrftoken"', url('test_index::csrf')), $b->body()); meq('<form action="http://localhost"><input type="text" name="aaa" /></form>', $b->body());
public function neq($column, $value) { $this->model->setCondition(neq($column, $value)); return $this; }
<?php \test\db\DateTime::create_table(); \test\db\AddNowDateTime::find_delete(); $obj = new \test\db\AddNowDateTime(); eq(null, $obj->ts()); eq(null, $obj->date()); eq(null, $obj->idate()); $obj->save(); foreach (\test\db\AddNowDateTime::find() as $o) { neq(null, $o->ts()); neq(null, $o->date()); neq(null, $o->idate()); }
\test\db\AddDateTime::create_table(); \test\db\AddDateTime::find_delete(); $obj = new \test\db\AddDateTime(); eq(null, $obj->ts()); eq(null, $obj->date()); eq(null, $obj->idate()); $obj->save(); foreach (\test\db\AddDateTime::find() as $o) { neq(null, $o->ts()); neq(null, $o->date()); neq(null, $o->idate()); } \test\db\AutoNow::create_table(); \test\db\AutoNow::find_delete(); $obj = new \test\db\AutoNow(); eq(null, $obj->ts()); eq(null, $obj->date()); eq(null, $obj->idate()); $obj->save(); $b = null; foreach (\test\db\AutoNow::find() as $o) { $b = $o->ts(); neq(null, $o->ts()); neq(null, $o->date()); neq(null, $o->idate()); sleep(1); $o->save(); } foreach (\test\db\AutoNow::find() as $o) { neq($b, $o->ts()); }
<?php function same($left, $right) { echo $left === $right ? "true\n" : "false\n"; } function eq($left, $right) { echo $left == $right ? "true\n" : "false\n"; } function neq($left, $right) { echo $left != $right ? "true\n" : "false\n"; } same(false, 0); neq(0, "b"); eq(true, -1);