Commit 691bdb96 authored by Антон Новиков's avatar Антон Новиков
Browse files

feat: Реализована модель вида сведений LandPlotUseTypePermission

parent 463cb0d7
<?php
namespace BusinessModel\PermissionObjectOperation\Impl\Instance;
use Xml\ModelBuilder;
use Xml\Instance\ModelElementInstanceInterface;
use Xml\Impl\Instance\ModelElementInstanceImpl;
use Xml\Impl\Instance\ModelTypeInstanceContext;
use Xml\Type\ModelTypeInstanceProviderInterface;
use BusinessModel\PermissionObjectOperation\Impl\PermissionObjectOperationModelConstants;
use BusinessModel\Core\Instance\{
RequestInterface as CoreRequestInterface,
MetaInterface as CoreMetaInterfaceInterface
};
use BusinessModel\Core\Impl\Instance\MetaImpl;
class RequestImpl extends ModelElementInstanceImpl implements CoreRequestInterface
{
private static $meta;
public static function registerType(ModelBuilder $modelBuilder): void
{
$typeBuilder = $modelBuilder->defineType(
CoreRequestInterface::class,
PermissionObjectOperationModelConstants::ELEMENT_NAME_REQUEST
)
->namespaceUri(PermissionObjectOperationModelConstants::MODEL_NAMESPACE)
->instanceProvider(
new class implements ModelTypeInstanceProviderInterface
{
public function newInstance(ModelTypeInstanceContext $instanceContext): CoreRequestInterface
{
return new RequestImpl($instanceContext);
}
}
);
$sequenceBuilder = $typeBuilder->sequence();
self::$meta = $sequenceBuilder->element(CoreMetaInterfaceInterface::class)
->build();
$typeBuilder->build();
}
public function __construct(ModelTypeInstanceContext $instanceContext)
{
parent::__construct($instanceContext);
}
public function addChildElement(ModelElementInstanceInterface $extraElement): void
{
$this->getDomElement()->appendChild($extraElement->getDomElement());
}
public function getRequest(): CoreRequestInterface
{
return $this;
}
}
<?php
namespace BusinessModel\PermissionObjectOperation\Impl;
class PermissionObjectOperationModelConstants
{
public const XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
public const MODEL_NAME = "request";
public const MODEL_NAMESPACE = "urn://rostelekom.ru/PermissionObjectOperation/1.0.5";
public const ELEMENT_NAME_REQUEST = "request";
}
<?php
namespace BusinessModel\PermissionObjectOperation\Impl;
use Xml\{
ModelBuilder,
ModelInterface
};
use BusinessModel\PermissionObjectOperation\Impl\Instance\RequestImpl;
use BusinessModel\Core\Impl\Instance\MetaImpl;
class PermissionObjectOperationModelInstanceImpl
{
private static $model;
private static $modelBuilder;
public static function getModel(): ModelInterface
{
if (self::$model === null) {
$modelBuilder = self::getModelBuilder();
RequestImpl::registerType($modelBuilder);
MetaImpl::registerType($modelBuilder);
self::$model = $modelBuilder->build();
}
return self::$model;
}
public static function getModelBuilder(): ModelBuilder
{
if (self::$modelBuilder === null) {
self::$modelBuilder = ModelBuilder::createInstance(PermissionObjectOperationModelConstants::MODEL_NAME);
}
return self::$modelBuilder;
}
}
<?php
namespace BusinessModel\PermissionObjectOperation\Impl;
use Xml\ModelInstanceInterface;
use Xml\Impl\ModelInstanceImpl;
use Xml\Impl\Parser\AbstractModelParser;
use Xml\Instance\DomDocumentInterface;
class PermissionObjectOperationParser extends AbstractModelParser
{
private const SCHEMA_LOCATION = "src/Model/Knd/PermissionObjectOperation/Resources/ConstructionPermits.xsd";
private const KND_NS = "urn://rostelekom.ru/PermissionObjectOperation/1.0.5";
public function __construct()
{
//$this->addSchema(self::KND_NS, self::SCHEMA_LOCATION);
}
public function parseModelFromText(string $text): ?ModelInstanceInterface
{
$path = tempnam(sys_get_temp_dir(), 'model');
file_put_contents($path, $text);
$fd = fopen($path, 'r+');
return $this->parseModelFromStream($fd);
}
protected function createModelInstance(DomDocumentInterface $document): ModelInstanceInterface
{
return new ModelInstanceImpl(
PermissionObjectOperationModelInstanceImpl::getModel(),
PermissionObjectOperationModelInstanceImpl::getModelBuilder(),
$document
);
}
}
......@@ -13,10 +13,13 @@ use BusinessModel\Types\Impl\Instance\{
RequestMessageImpl,
SenderProvidedRequestDataImpl
};
use BusinessModel\Core\Impl\Instance\MetaImpl;
use BusinessModel\ConstructionPermits\Impl\Instance\RequestImpl as ConstructionPermitsRequestImpl;
use BusinessModel\ConstructionSupervision\Impl\Instance\RequestImpl as ConstructionSupervisionRequestImpl;
use BusinessModel\GPZU\Impl\Instance\RequestImpl as GPZURequestImpl;
use BusinessModel\Core\Impl\Instance\MetaImpl;
use BusinessModel\LandPlotUseTypePermission\Impl\Instance\RequestImpl as LandPlotUseTypePermissionRequestImpl;
use BusinessModel\PermissionObjectOperation\Impl\Instance\RequestImpl as PermissionObjectOperationRequestImpl;
class TypesModelInstanceImpl
{
......@@ -36,6 +39,8 @@ class TypesModelInstanceImpl
ConstructionPermitsRequestImpl::registerType($modelBuilder);
ConstructionSupervisionRequestImpl::registerType($modelBuilder);
GPZURequestImpl::registerType($modelBuilder);
LandPlotUseTypePermissionRequestImpl::registerType($modelBuilder);
PermissionObjectOperationRequestImpl::registerType($modelBuilder);
MetaImpl::registerType($modelBuilder);
self::$model = $modelBuilder->build();
......
<?php
namespace Tests\PermissionObjectOperation;
use PHPUnit\Framework\TestCase;
use Xml\ModelInstanceInterface;
use Xml\Impl\Instance\ModelTypeInstanceContext;
use BusinessModel\PermissionObjectOperation\Impl\PermissionObjectOperationParser;
use BusinessModel\Core\Instance\MetaInterface;
class PermissionObjectOperationTest extends TestCase
{
protected $modelParser;
protected $modelInstance;
/**
* @param string $test
*/
protected function parseModel(string $test)
{
$this->modelParser = new PermissionObjectOperationParser();
$xml = fopen('tests/PermissionObjectOperation/Resources/' . $test . '.xml', 'r+');
$this->modelInstance = $this->modelParser->parseModelFromStream($xml);
}
/**
* @param string $text
*/
protected function parseModelFromText(string $text)
{
$this->modelParser = new PermissionObjectOperationParser();
$this->modelInstance = $this->modelParser->parseModelFromText($text);
}
public function testRequest0Meta(): void
{
$this->parseModel("Request0");
$meta = $this->modelInstance->newInstance(MetaInterface::class);
$meta->setId("1");
$meta->setNodeId("2");
$meta->setReferenceMessageId("3");
$meta->setTransactionCode("4");
$meta->setSenderId("5");
$meta->setRecipientId("6");
$request = $this->modelInstance->getDocumentElement();
$request->addChildElement($meta);
$doc = $this->modelInstance->getDocument()->getDomSource();
$this->assertTrue(true);
}
}
<?xml version="1.0" encoding="utf-8"?>
<tns:request xmlns:tns="urn://rostelekom.ru/PermissionObjectOperation/1.0.5" oktmo="MNSV75_3T">
<tns:Service>
<tns:currentDate>25.05.2022</tns:currentDate>
<tns:userType>PERSON_RF</tns:userType>
<tns:orderId>764399643</tns:orderId>
<tns:orderStatusCode>draft</tns:orderStatusCode>
<tns:TargetId>-10000115324</tns:TargetId>
<tns:TargetName>Выдача разрешения на ввод объекта в эксплуатацию</tns:TargetName>
<tns:DepartmentId>-10003772917</tns:DepartmentId>
<tns:DepartmentName>Уполномоченный орган субъекта Российской Федерации</tns:DepartmentName>
<tns:okato>14000000000</tns:okato>
</tns:Service>
<tns:Goal>1</tns:Goal>
<tns:VariantChoice>
<tns:KP_OA_04>1</tns:KP_OA_04>
<tns:KP_OA_05>1</tns:KP_OA_05>
<tns:KP_OA_06>1</tns:KP_OA_06>
<tns:KP_OA_07>1</tns:KP_OA_07>
<tns:KP_OA_09>1</tns:KP_OA_09>
<tns:KP_OA_11>2</tns:KP_OA_11>
<tns:KP_OA_11_1>2</tns:KP_OA_11_1>
<tns:KP_OA_12>1</tns:KP_OA_12>
<tns:KP_OA_13>1</tns:KP_OA_13>
<tns:KP_OA_14>1</tns:KP_OA_14>
<tns:KP_OA_15>1</tns:KP_OA_15>
</tns:VariantChoice>
<tns:DelegateInfo>1</tns:DelegateInfo>
<tns:RecipientPersonalData>
<tns:fullfio>Иванов Иван Иванович</tns:fullfio>
<tns:lastname>Иванов</tns:lastname>
<tns:firstname>Иван</tns:firstname>
<tns:middlename>Иванович</tns:middlename>
<tns:snils>000-000-600 22</tns:snils>
<tns:gender>2</tns:gender>
<tns:dateBirth>13.11.1945</tns:dateBirth>
<tns:citizenship>РОССИЯ</tns:citizenship>
<tns:Phone>+7(000)6111436</tns:Phone>
<tns:Email>Akurbanov@it-one.ru</tns:Email>
<tns:regAddress>607490, обл. Нижегородская, р-н. Пильнинский, мкр. Западный (рп. Пильна), д. 8, кв. 11</tns:regAddress>
<tns:DocumentPersonal>
<tns:typeDoc>Паспорт гражданина РФ</tns:typeDoc>
<tns:nameDoc>Паспорт гражданина РФ</tns:nameDoc>
<tns:docseries>0898</tns:docseries>
<tns:docnumber>667667</tns:docnumber>
<tns:issuedate>05.08.2016</tns:issuedate>
<tns:issueorg>Отделом УФМС России по г. Ярославль</tns:issueorg>
<tns:issueidPassportRF>889898</tns:issueidPassportRF>
</tns:DocumentPersonal>
</tns:RecipientPersonalData>
<tns:CompetentOrganization>
<tns:OrganizationID>1183123034490</tns:OrganizationID>
<tns:Name>Администрация Алексеевского городского округа (Управление архитектуры и строительства)</tns:Name>
</tns:CompetentOrganization>
<tns:DataLandPlot>
<tns:DataLandPlotBlock>
<tns:LandPlotCadastralNumber>11:11:1111111:111111</tns:LandPlotCadastralNumber>
</tns:DataLandPlotBlock>
</tns:DataLandPlot>
<tns:ObjectData>
<tns:ObjectName>наименование объекта</tns:ObjectName>
</tns:ObjectData>
<tns:BuildingPermit>
<tns:Number>4444</tns:Number>
<tns:Date>06.05.2022</tns:Date>
<tns:Issuer>орган</tns:Issuer>
</tns:BuildingPermit>
<tns:MethodGettingResults>
<tns:IsPaperDocumentRequired>false</tns:IsPaperDocumentRequired>
</tns:MethodGettingResults>
<tns:Documents>
<tns:ConfirmingComplianceParameters>
<tns:CodeDocument>ConfirmingComplianceParameters</tns:CodeDocument>
<tns:Name>1.zip</tns:Name>
<tns:URL>ConfirmingComplianceParameters.FileUploadComponent.actPD.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:ConfirmingComplianceParameters>
<tns:ActConnection>
<tns:CodeDocument>ActConnection</tns:CodeDocument>
<tns:Name>2.zip</tns:Name>
<tns:URL>ActConnection.FileUploadComponent.ActConnection.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:ActConnection>
<tns:DiagramLocationObject>
<tns:CodeDocument>SchemeLandPlotPartition</tns:CodeDocument>
<tns:Name>3.zip</tns:Name>
<tns:URL>SchemeLocationObject.FileUploadComponent.ShcemaOKS.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:DiagramLocationObject>
<tns:TechnicalPlanObject>
<tns:CodeDocument>TechnicalPlanObject</tns:CodeDocument>
<tns:Name>4.zip</tns:Name>
<tns:URL>TechnicalPlanObject.FileUploadComponent.TechPlan.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:TechnicalPlanObject>
</tns:Documents>
</tns:request>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<tns:request xmlns:tns="urn://rostelekom.ru/PermissionObjectOperation/1.0.5" oktmo="MNSV75_3T">
<tns:Service>
<tns:currentDate>25.05.2022</tns:currentDate>
<tns:userType>PERSON_RF</tns:userType>
<tns:orderId>764399643</tns:orderId>
<tns:orderStatusCode>draft</tns:orderStatusCode>
<tns:TargetId>-10000115324</tns:TargetId>
<tns:TargetName>Выдача разрешения на ввод объекта в эксплуатацию</tns:TargetName>
<tns:DepartmentId>-10003772917</tns:DepartmentId>
<tns:DepartmentName>Уполномоченный орган субъекта Российской Федерации</tns:DepartmentName>
<tns:okato>14000000000</tns:okato>
</tns:Service>
<tns:Goal>1</tns:Goal>
<tns:VariantChoice>
<tns:KP_OA_04>1</tns:KP_OA_04>
<tns:KP_OA_05>1</tns:KP_OA_05>
<tns:KP_OA_06>1</tns:KP_OA_06>
<tns:KP_OA_07>1</tns:KP_OA_07>
<tns:KP_OA_09>1</tns:KP_OA_09>
<tns:KP_OA_11>2</tns:KP_OA_11>
<tns:KP_OA_11_1>2</tns:KP_OA_11_1>
<tns:KP_OA_12>1</tns:KP_OA_12>
<tns:KP_OA_13>1</tns:KP_OA_13>
<tns:KP_OA_14>1</tns:KP_OA_14>
<tns:KP_OA_15>1</tns:KP_OA_15>
</tns:VariantChoice>
<tns:DelegateInfo>1</tns:DelegateInfo>
<tns:RecipientPersonalData>
<tns:fullfio>Иванов Иван Иванович</tns:fullfio>
<tns:lastname>Иванов</tns:lastname>
<tns:firstname>Иван</tns:firstname>
<tns:middlename>Иванович</tns:middlename>
<tns:snils>000-000-600 22</tns:snils>
<tns:gender>2</tns:gender>
<tns:dateBirth>13.11.1945</tns:dateBirth>
<tns:citizenship>РОССИЯ</tns:citizenship>
<tns:Phone>+7(000)6111436</tns:Phone>
<tns:Email>Akurbanov@it-one.ru</tns:Email>
<tns:regAddress>607490, обл. Нижегородская, р-н. Пильнинский, мкр. Западный (рп. Пильна), д. 8, кв. 11</tns:regAddress>
<tns:DocumentPersonal>
<tns:typeDoc>Паспорт гражданина РФ</tns:typeDoc>
<tns:nameDoc>Паспорт гражданина РФ</tns:nameDoc>
<tns:docseries>0898</tns:docseries>
<tns:docnumber>667667</tns:docnumber>
<tns:issuedate>05.08.2016</tns:issuedate>
<tns:issueorg>Отделом УФМС России по г. Ярославль</tns:issueorg>
<tns:issueidPassportRF>889898</tns:issueidPassportRF>
</tns:DocumentPersonal>
</tns:RecipientPersonalData>
<tns:CompetentOrganization>
<tns:OrganizationID>1183123034490</tns:OrganizationID>
<tns:Name>Администрация Алексеевского городского округа (Управление архитектуры и строительства)</tns:Name>
</tns:CompetentOrganization>
<tns:DataLandPlot>
<tns:DataLandPlotBlock>
<tns:LandPlotCadastralNumber>11:11:1111111:111111</tns:LandPlotCadastralNumber>
</tns:DataLandPlotBlock>
</tns:DataLandPlot>
<tns:ObjectData>
<tns:ObjectName>наименование объекта</tns:ObjectName>
</tns:ObjectData>
<tns:BuildingPermit>
<tns:Number>4444</tns:Number>
<tns:Date>06.05.2022</tns:Date>
<tns:Issuer>орган</tns:Issuer>
</tns:BuildingPermit>
<tns:MethodGettingResults>
<tns:IsPaperDocumentRequired>false</tns:IsPaperDocumentRequired>
</tns:MethodGettingResults>
<tns:Documents>
<tns:ConfirmingComplianceParameters>
<tns:CodeDocument>ConfirmingComplianceParameters</tns:CodeDocument>
<tns:Name>1.zip</tns:Name>
<tns:URL>ConfirmingComplianceParameters.FileUploadComponent.actPD.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:ConfirmingComplianceParameters>
<tns:ActConnection>
<tns:CodeDocument>ActConnection</tns:CodeDocument>
<tns:Name>2.zip</tns:Name>
<tns:URL>ActConnection.FileUploadComponent.ActConnection.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:ActConnection>
<tns:DiagramLocationObject>
<tns:CodeDocument>SchemeLandPlotPartition</tns:CodeDocument>
<tns:Name>3.zip</tns:Name>
<tns:URL>SchemeLocationObject.FileUploadComponent.ShcemaOKS.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:DiagramLocationObject>
<tns:TechnicalPlanObject>
<tns:CodeDocument>TechnicalPlanObject</tns:CodeDocument>
<tns:Name>4.zip</tns:Name>
<tns:URL>TechnicalPlanObject.FileUploadComponent.TechPlan.764399643</tns:URL>
<tns:type>application/x-zip-compressed</tns:type>
</tns:TechnicalPlanObject>
</tns:Documents>
</tns:request>
\ No newline at end of file
......@@ -14,13 +14,15 @@ class TypesTest extends TestCase
protected $modelInstance;
private $basePath = '/accent2/businessmodel/';
/**
* @param string $test
*/
protected function parseModel(string $test)
{
$this->modelParser = new TypesParser();
$xml = fopen('tests/Types/Resources/' . $test . '.xml', 'r+');
$xml = fopen($this->basePath .'tests/Types/Resources/' . $test . '.xml', 'r+');
$this->modelInstance = $this->modelParser->parseModelFromStream($xml);
}
......@@ -134,4 +136,39 @@ class TypesTest extends TestCase
$doc = $this->modelInstance->getDocument()->getDomSource();
$this->assertEquals(2664, strpos($doc->saveXml(), '<ns0:meta id="1" nodeId="2" referenceMessageId="3" transactionCode="4" senderId="5" recipientId="6"/>'));
}
public function testLandPlotUseTypePermissionWithNoMetadata(): void
{
$this->parseModel("NoMetadataLandPlotUseTypePermission");
$meta = $this->modelInstance->newInstance(MetaInterface::class);
$meta->setId("1");
$meta->setNodeId("2");
$meta->setReferenceMessageId("3");
$meta->setTransactionCode("4");
$meta->setSenderId("5");
$meta->setRecipientId("6");
$root = $this->modelInstance->getDocumentElement();
$request = $root->getRequest();
$request->addChildElement($meta);
$doc = $this->modelInstance->getDocument()->getDomSource();
$this->assertEquals(6114, strpos($doc->saveXml(), '<ns0:meta id="1" nodeId="2" referenceMessageId="3" transactionCode="4" senderId="5" recipientId="6"/>'));
}
public function testPermissionObjectOperationWithNoMetadata(): void
{
$this->parseModel("NoMetadataPermissionObjectOperation");
$meta = $this->modelInstance->newInstance(MetaInterface::class);
$meta->setId("1");
$meta->setNodeId("2");
$meta->setReferenceMessageId("3");
$meta->setTransactionCode("4");
$meta->setSenderId("5");
$meta->setRecipientId("6");
$root = $this->modelInstance->getDocumentElement();
$request = $root->getRequest();
$request->addChildElement($meta);
$doc = $this->modelInstance->getDocument()->getDomSource();
$this->assertEquals(5044, strpos($doc->saveXml(), '<ns0:meta id="1" nodeId="2" referenceMessageId="3" transactionCode="4" senderId="5" recipientId="6"/>'));
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment